import numpy as np


class Constants(object):
        """All constants using for the computations"""

        def __init__(self):
                # Gravitational parameters for planet as the central body
                self.gmSun = 132712440041.939  # km^3 / s^2
                self.gmMoon = 4902.8000661638  # km^3 / s^2
                self.gmEarth = 398600.4418  # km^3 / s^2
                self.gmEarthEGM08 = 398600.4415  # gravity field is EGM-2008

                # IERS Standards for Constants - coded from IERS Conventions 2010
                self.EarthRadius = 6378.13630  # km
                self.SunRadius = 696000.0  # km
                self.MoonRadius = 1738.0  # km

                # Reference epoch (J2000.0), Modified Julian Date
                self.mjd00 = 51544.5
                # Days per Julian century
                self.djc = 36525
                # Reference epoch(J2000.0), JD
                self.dj00 = 2451545

                # Arcseconds to radians
                self.asec2rad = 4.848136811095359935899141e-6
                # Arcseconds in a full circle
                self.turnas = 1296000

                # J2000.0 obliquity (Lieske et al. 1977)
                self.eps0 = 84381.448 * self.asec2rad

                # Differential UTC
                self.dUTC = -36.0
                # Differential GPS
                self.dGPS = 19.0
                # UT1 - UTC(s)
                self.dUT1 = -0.072073685
                # Differential TT
                self.dTT = 32.184

                # Fundamental Arguments(from IERS Conventions 2003)
                self.fundArg = np.array([
                                    # Mean Anomaly of the Moon
                                    [134.96340251 * 3600, 1717915923.2178, 31.8792, 0.051635, -0.00024470],
                                    # Mean Anomaly of the Sun
                                    [357.52910918 * 3600, 129596581.0481, -0.5532, 0.000136, -0.00001149],
                                    # Mean longitude of the Moon minus that of the ascending node
                                    [93.27209062 * 3600, 1739527262.8478, -12.7512, -0.001037, 0.00000417],
                                    # Mean Elongation of the Moon from the Sun
                                    [297.85019547 * 3600, 1602961601.2090, -6.3706, 0.006593, -0.00003169],
                                    # Mean Longitude of the Ascending Node of the Moon
                                    [125.04455501 * 3600, -6962890.5431, 7.4722, 0.007702, -0.00005939]])

                # MHB2000 code Arguments
                self.mhbArg = np.array([
                                    # Mean Anomaly of the Moon
                                    [2.35555598, 8328.6914269554],
                                    # Mean Anomaly of the Sun
                                    [6.24006013, 628.301955],
                                    # Mean longitude of the Moon minus that of the ascending node
                                    [1.627905234, 8433.466158131],
                                    # Mean Elongation of the Moon from the Sun
                                    [5.198466741, 7771.3771468121],
                                    # Mean Longitude of the Ascending Node of the Moon
                                    [2.18243920, - 33.757045]])

                # Planetary longitudes, Mercury through Uranus (IERS 2003)
                self.planetArg = np.array([[4.402608842, 2608.7903141574],
                                      [3.176146697, 1021.3285546211],
                                      [1.753470314, 628.3075849991],
                                      [6.203480913, 334.0612426700],
                                      [0.599546497, 52.9690962641],
                                      [0.874016757, 21.3299104960],
                                      [5.481293872, 7.4781598567]])

                # Greenwich Mean Sidereal Time coefficients
                self.gmstCoef = np.array([0.014506, 4612.156534, 1.3915817, -0.00000044, -0.000029956, -0.0000000368])

                # Coefficients to calculate tidal perturbations
                # Frequency-dependent tidal variations
                self.n20 = np.array([[0,  0,  0,  0,  1], [0, 0, - 2, 2, - 2], [0, 0, - 2, 0, - 2], [- 1, 0, 0, 0, 0], [0, 0, - 2, 0, - 1]])

                self.a20 = np.array([complex(16.6, -6.7), complex(-5.5, 4.3), complex(0.6, 6.3), complex(-1.2, 3.7),
                                complex(0.2, 2.6)]) * 1e-12

                self.n21 = np.array([[0, 0, 0, 0, 0], [0, 0, 0, 0, 1], [0, 0, 2, -2, 2], [0, 0, 0, 0, -1], [0, 0, 2, 0, 2], [0, 0, -2, 2, -2]])

                self.a21 = np.array([complex(470.9, -30.2), complex(68.1, -4.6), complex(-43.4, 2.9), complex(-8.8, 0.5), complex(-6.8, 0.6),
                                complex(-5.0, 0.3)]) * complex(0, -1e-12)

                self.n22 = np.array([[0, 0, 2, 0, 2], [1, 0, 2, 0, 2]])

                self.a22 = np.array([-1.2, -0.3]) * 1e-12

                # Coefficents to count the CIO locator s

                # Argument coefficients for t^0
                self.cs0 = np.array([ [0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 2, -2, 3, 0, 0, 0],
                                 [0, 0, 2, -2, 1, 0, 0, 0], [0, 0, 2, -2, 2, 0, 0, 0], [0, 0, 2, 0, 3, 0, 0, 0],
                                 [0, 0, 2, 0, 1, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0], [0, 1, 0, 0, 1, 0, 0, 0],
                                 [0, 1, 0, 0, -1, 0, 0, 0], [1, 0, 0, 0, -1, 0, 0, 0], [1, 0, 0, 0, 1, 0, 0, 0],
                                 [0, 1, 2, -2, 3, 0, 0, 0], [0, 1, 2, -2, 1, 0, 0, 0], [0, 0, 4, -4, 4, 0, 0, 0],
                                 [0, 0, 1, -1, 1, -8, 12, 0], [0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 2, 0, 2, 0, 0, 0],
                                 [1, 0, 2, 0, 3, 0, 0, 0], [1, 0, 2, 0, 1, 0, 0, 0], [0, 0, 2, -2, 0, 0, 0, 0],
                                 [0, 1, -2, 2, -3, 0, 0, 0], [0, 1, -2, 2, -1, 0, 0, 0], [0, 0, 0, 0, 0, 8, -13, -1],
                                 [0, 0, 0, 2, 0, 0, 0, 0], [2, 0, -2, 0, -1, 0, 0, 0], [0, 1, 2, -2, 2, 0, 0, 0],
                                 [1, 0, 0, -2, 1, 0, 0, 0], [1, 0, 0, -2, -1, 0, 0, 0], [0, 0, 4, -2, 4, 0, 0, 0],
                                 [0, 0, 2, -2, 4, 0, 0, 0], [1, 0, -2, 0, -3, 0, 0, 0], [1, 0, -2, 0, -1, 0, 0, 0]]).transpose()

                # Argument coefficients for t ^ 1
                self.cs1 = np.array([[0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 2, -2, 3, 0, 0, 0]]).transpose()

                # Argument coefficients for t ^ 2
                self.cs2 = np.array([[0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 2, -2, 2, 0, 0, 0], [0, 0, 2, 0, 2, 0, 0, 0],
                                    [0, 0, 0, 0, 2, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0],
                                    [0, 1, 2, -2, 2, 0, 0, 0], [0, 0, 2, 0, 1, 0, 0, 0], [1, 0, 2, 0, 2, 0, 0, 0],
                                    [0, 1, -2, 2, -2, 0, 0, 0], [1, 0, 0, -2, 0, 0, 0, 0], [0, 0, 2, -2, 1, 0, 0, 0],
                                    [1, 0, -2, 0, -2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0], [1, 0, 0, 0, 1, 0, 0, 0],
                                    [1, 0, -2, -2, -2, 0, 0, 0], [1, 0, 0, 0, -1, 0, 0, 0], [1, 0, 2, 0, 1, 0, 0, 0],
                                    [2, 0, 0, -2, 0, 0, 0, 0], [2, 0, -2, 0, -1, 0, 0, 0], [0, 0, 2, 2, 2, 0, 0, 0],
                                    [2, 0, 2, 0, 2, 0, 0, 0], [2, 0, 0, 0, 0, 0, 0, 0], [1, 0, 2, -2, 2, 0, 0, 0],
                                    [0, 0, 2, 0, 0, 0, 0, 0]]).transpose()

                # Argument coefficients for t ^ 3
                self.cs3 = np.array([[0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 2, -2, 2, 0, 0, 0], [0, 0, 2, 0, 2, 0, 0, 0],
                                [0, 0, 0, 0, 2, 0, 0, 0]]).transpose()

                # Argument coefficients for t ^ 4
                self.cs4 = np.array([0, 0, 0, 0, 1, 0, 0, 0])

                # Sine and cosine coefficients for t ^ 0
                self.ss0 = np.array([[-2640.73e-6, 0.39e-6], [-63.53e-6, 0.02e-6], [-11.75e-6, -0.01e-6], [-11.21e-6, -0.01e-6],
                                [4.57e-6, 0], [-2.02e-6, 0], [-1.98e-6, 0], [1.72e-6, 0],
                                [1.41e-6, 0.01e-6], [1.26e-6, 0.01e-6], [0.63e-6, 0], [0.63e-6, 0],
                                [-0.46e-6, 0], [-0.45e-6, 0], [-0.36e-6, 0], [0.24e-6, 0.12e-6],
                                [-0.32e-6, 0], [-0.28e-6, 0], [-0.27e-6, 0], [-0.26e-6, 0],
                                [0.21e-6, 0], [-0.19e-6, 0], [-0.18e-6, 0], [0.10e-6, -0.05e-6],
                                [-0.15e-6, 0], [0.14e-6, 0], [0.14e-6, 0], [-0.14e-6, 0],
                                [-0.14e-6, 0], [-0.13e-6, 0], [0.11e-6, 0], [-0.11e-6, 0], [-0.11e-6, 0]]).transpose()
                # Sine and cosine coefficients for t ^ 1
                self.ss1 = np.array([[-0.07e-6, 3.57e-6], [1.71e-6, -0.03e-6], [0, 0.48e-6]]).transpose()

                # Sine and cosine coefficients for t ^ 2
                self.ss2 = np.array([[743.53e-6, -0.17e-6], [56.91e-6, 0.06e-6], [9.84e-6, -0.01e-6], [-8.85e-6, 0.01e-6],
                                [-6.38e-6, -0.05e-6], [-3.07e-6, 0], [2.23e-6, 0], [1.67e-6, 0],
                                [1.30e-6, 0], [0.93e-6, 0], [0.68e-6, 0], [-0.55e-6, 0],
                                [0.53e-6, 0], [-0.27e-6, 0], [-0.27e-6, 0], [-0.26e-6, 0],
                                [-0.25e-6, 0], [0.22e-6, 0], [-0.21e-6, 0], [0.20e-6, 0],
                                [0.17e-6, 0], [0.13e-6, 0], [-0.13e-6, 0], [-0.12e-6, 0], [-0.11e-6, 0]]).transpose()

                # Sine and cosine coefficients for t ^ 3
                self.ss3 = np.array([[0.30e-6, -23.51e-6], [-0.03e-6, -1.39e-6], [-0.01e-6, -0.24e-6], [0, 0.22e-6]]).transpose()

                # Sine and cosine coefficients for t ^ 4
                self.ss4 = np.array([-0.26e-6, -0.01e-6])

                # For Everett interpolation
                # Everett coefficients
                self.everettCoef = np.array([
                    [1.7873015873015873, -0.9359567901234568, 0.1582175925925926, -0.9755291005291005e-02, 0.1929012345679012e-03],
                    [-0.4960317460317460, 0.6057098765432098, -0.1171296296296296, 0.7605820105820106e-02, -0.1543209876543210e-03],
                    [0.1206349206349206, -0.1632716049382716, 0.4606481481481481e-01, -0.3505291005291005e-02, 0.7716049382716048e-04],
                    [-0.1984126984126984e-01, 0.2779982363315696e-01, -0.8796296296296296e-02, 0.8597883597883598e-03, -0.2204585537918871e-04],
                    [0.1587301587301587e-02, -0.2259700176366843e-02,  0.7523148148148148e-03, -0.8267195767195767e-04, 0.2755731922398589e-05]])

                # Multiplicative factors
                self.multFactors = np.array([[1.0, 3.0, 5.0, 7.0, 9.0], [1.0, 3.0, 5.0, 7.0, 9.0], [1.0, 3.0, 5.0, 7.0, 9.0]])


                # Luni-Solar argument multipliers
                # L     L'    F     D     Om
                self.lunSolarArgMult = np.array([
                        0, 0, 0, 0, 1,
                        0, 0, 2, -2, 2,
                        0, 0, 2, 0, 2,
                        0, 0, 0, 0, 2,
                        0, 1, 0, 0, 0,
                        0, 1, 2, -2, 2,
                        1, 0, 0, 0, 0,
                        0, 0, 2, 0, 1,
                        1, 0, 2, 0, 2,
                        0, -1, 2, -2, 2,
                        0, 0, 2, -2, 1,
                        -1, 0, 2, 0, 2,
                        -1, 0, 0, 2, 0,
                        1, 0, 0, 0, 1,
                        -1, 0, 0, 0, 1,
                        -1, 0, 2, 2, 2,
                        1, 0, 2, 0, 1,
                        -2, 0, 2, 0, 1,
                        0, 0, 0, 2, 0,
                        0, 0, 2, 2, 2,
                        0, -2, 2, -2, 2,
                        -2, 0, 0, 2, 0,
                        2, 0, 2, 0, 2,
                        1, 0, 2, -2, 2,
                        -1, 0, 2, 0, 1,
                        2, 0, 0, 0, 0,
                        0, 0, 2, 0, 0,
                        0, 1, 0, 0, 1,
                        -1, 0, 0, 2, 1,
                        0, 2, 2, -2, 2,
                        0, 0, -2, 2, 0,
                        1, 0, 0, -2, 1,
                        0, -1, 0, 0, 1,
                        -1, 0, 2, 2, 1,
                        0, 2, 0, 0, 0,
                        1, 0, 2, 2, 2,
                        -2, 0, 2, 0, 0,
                        0, 1, 2, 0, 2,
                        0, 0, 2, 2, 1,
                        0, -1, 2, 0, 2,
                        0, 0, 0, 2, 1,
                        1, 0, 2, -2, 1,
                        2, 0, 2, -2, 2,
                        -2, 0, 0, 2, 1,
                        2, 0, 2, 0, 1,
                        0, -1, 2, -2, 1,
                        0, 0, 0, -2, 1,
                        -1, -1, 0, 2, 0,
                        2, 0, 0, -2, 1,
                        1, 0, 0, 2, 0,
                        0, 1, 2, -2, 1,
                        1, -1, 0, 0, 0,
                        -2, 0, 2, 0, 2,
                        3, 0, 2, 0, 2,
                        0, -1, 0, 2, 0,
                        1, -1, 2, 0, 2,
                        0, 0, 0, 1, 0,
                        -1, -1, 2, 2, 2,
                        -1, 0, 2, 0, 0,
                        0, -1, 2, 2, 2,
                        -2, 0, 0, 0, 1,
                        1, 1, 2, 0, 2,
                        2, 0, 0, 0, 1,
                        -1, 1, 0, 1, 0,
                        1, 1, 0, 0, 0,
                        1, 0, 2, 0, 0,
                        -1, 0, 2, -2, 1,
                        1, 0, 0, 0, 2,
                        -1, 0, 0, 1, 0,
                        0, 0, 2, 1, 2,
                        -1, 0, 2, 4, 2,
                        -1, 1, 0, 1, 1,
                        0, -2, 2, -2, 1,
                        1, 0, 2, 2, 1,
                        -2, 0, 2, 2, 2,
                        -1, 0, 0, 0, 2,
                        1, 1, 2, -2, 2,
                        -2, 0, 2, 4, 2,
                        -1, 0, 4, 0, 2,
                        2, 0, 2, -2, 1,
                        2, 0, 2, 2, 2,
                        1, 0, 0, 2, 1,
                        3, 0, 0, 0, 0,
                        3, 0, 2, -2, 2,
                        0, 0, 4, -2, 2,
                        0, 1, 2, 0, 1,
                        0, 0, -2, 2, 1,
                        0, 0, 2, -2, 3,
                        -1, 0, 0, 4, 0,
                        2, 0, -2, 0, 1,
                        -2, 0, 0, 4, 0,
                        -1, -1, 0, 2, 1,
                        -1, 0, 0, 1, 1,
                        0, 1, 0, 0, 2,
                        0, 0, -2, 0, 1,
                        0, -1, 2, 0, 1,
                        0, 0, 2, -1, 2,
                        0, 0, 2, 4, 2,
                        -2, -1, 0, 2, 0,
                        1, 1, 0, -2, 1,
                        -1, 1, 0, 2, 0,
                        -1, 1, 0, 1, 2,
                        1, -1, 0, 0, 1,
                        1, -1, 2, 2, 2,
                        -1, 1, 2, 2, 2,
                        3, 0, 2, 0, 1,
                        0, 1, -2, 2, 0,
                        -1, 0, 0, -2, 1,
                        0, 1, 2, 2, 2,
                        -1, -1, 2, 2, 1,
                        0, -1, 0, 0, 2,
                        1, 0, 2, -4, 1,
                        -1, 0, -2, 2, 0,
                        0, -1, 2, 2, 1,
                        2, -1, 2, 0, 2,
                        0, 0, 0, 2, 2,
                        1, -1, 2, 0, 1,
                        -1, 1, 2, 0, 2,
                        0, 1, 0, 2, 0,
                        0, -1, -2, 2, 0,
                        0, 3, 2, -2, 2,
                        0, 0, 0, 1, 1,
                        -1, 0, 2, 2, 0,
                        2, 1, 2, 0, 2,
                        1, 1, 0, 0, 1,
                        1, 1, 2, 0, 1,
                        2, 0, 0, 2, 0,
                        1, 0, -2, 2, 0,
                        -1, 0, 0, 2, 2,
                        0, 1, 0, 1, 0,
                        0, 1, 0, -2, 1,
                        -1, 0, 2, -2, 2,
                        0, 0, 0, -1, 1,
                        -1, 1, 0, 0, 1,
                        1, 0, 2, -1, 2,
                        1, -1, 0, 2, 0,
                        0, 0, 0, 4, 0,
                        1, 0, 2, 1, 2,
                        0, 0, 2, 1, 1,
                        1, 0, 0, -2, 2,
                        -1, 0, 2, 4, 1,
                        1, 0, -2, 0, 1,
                        1, 1, 2, -2, 1,
                        0, 0, 2, 2, 0,
                        -1, 0, 2, -1, 1,
                        -2, 0, 2, 2, 1,
                        4, 0, 2, 0, 2,
                        2, -1, 0, 0, 0,
                        2, 1, 2, -2, 2,
                        0, 1, 2, 1, 2,
                        1, 0, 4, -2, 2,
                        -1, -1, 0, 0, 1,
                        0, 1, 0, 2, 1,
                        -2, 0, 2, 4, 1,
                        2, 0, 2, 0, 0,
                        1, 0, 0, 1, 0,
                        -1, 0, 0, 4, 1,
                        -1, 0, 4, 0, 1,
                        2, 0, 2, 2, 1,
                        0, 0, 2, -3, 2,
                        -1, -2, 0, 2, 0,
                        2, 1, 0, 0, 0,
                        0, 0, 4, 0, 2,
                        0, 0, 0, 0, 3,
                        0, 3, 0, 0, 0,
                        0, 0, 2, -4, 1,
                        0, -1, 0, 2, 1,
                        0, 0, 0, 4, 1,
                        -1, -1, 2, 4, 2,
                        1, 0, 2, 4, 2,
                        -2, 2, 0, 2, 0,
                        -2, -1, 2, 0, 1,
                        -2, 0, 0, 2, 2,
                        -1, -1, 2, 0, 2,
                        0, 0, 4, -2, 1,
                        3, 0, 2, -2, 1,
                        -2, -1, 0, 2, 1,
                        1, 0, 0, -1, 1,
                        0, -2, 0, 2, 0,
                        -2, 0, 0, 4, 1,
                        -3, 0, 0, 0, 1,
                        1, 1, 2, 2, 2,
                        0, 0, 2, 4, 1,
                        3, 0, 2, 2, 2,
                        -1, 1, 2, -2, 1,
                        2, 0, 0, -4, 1,
                        0, 0, 0, -2, 2,
                        2, 0, 2, -4, 1,
                        -1, 1, 0, 2, 1,
                        0, 0, 2, -1, 1,
                        0, -2, 2, 2, 2,
                        2, 0, 0, 2, 1,
                        4, 0, 2, -2, 2,
                        2, 0, 0, -2, 2,
                        0, 2, 0, 0, 1,
                        1, 0, 0, -4, 1,
                        0, 2, 2, -2, 1,
                        -3, 0, 0, 4, 0,
                        -1, 1, 2, 0, 1,
                        -1, -1, 0, 4, 0,
                        -1, -2, 2, 2, 2,
                        -2, -1, 2, 4, 2,
                        1, -1, 2, 2, 1,
                        -2, 1, 0, 2, 0,
                        -2, 1, 2, 0, 1,
                        2, 1, 0, -2, 1,
                        -3, 0, 2, 0, 1,
                        -2, 0, 2, -2, 1,
                        -1, 1, 0, 2, 2,
                        0, -1, 2, -1, 2,
                        -1, 0, 4, -2, 2,
                        0, -2, 2, 0, 2,
                        -1, 0, 2, 1, 2,
                        2, 0, 0, 0, 2,
                        0, 0, 2, 0, 3,
                        -2, 0, 4, 0, 2,
                        -1, 0, -2, 0, 1,
                        -1, 1, 2, 2, 1,
                        3, 0, 0, 0, 1,
                        -1, 0, 2, 3, 2,
                        2, -1, 2, 0, 1,
                        0, 1, 2, 2, 1,
                        0, -1, 2, 4, 2,
                        2, -1, 2, 2, 2,
                        0, 2, -2, 2, 0,
                        -1, -1, 2, -1, 1,
                        0, -2, 0, 0, 1,
                        1, 0, 2, -4, 2,
                        1, -1, 0, -2, 1,
                        -1, -1, 2, 0, 1,
                        1, -1, 2, -2, 2,
                        -2, -1, 0, 4, 0,
                        -1, 0, 0, 3, 0,
                        -2, -1, 2, 2, 2,
                        0, 2, 2, 0, 2,
                        1, 1, 0, 2, 0,
                        2, 0, 2, -1, 2,
                        1, 0, 2, 1, 1,
                        4, 0, 0, 0, 0,
                        2, 1, 2, 0, 1,
                        3, -1, 2, 0, 2,
                        -2, 2, 0, 2, 1,
                        1, 0, 2, -3, 1,
                        1, 1, 2, -4, 1,
                        -1, -1, 2, -2, 1,
                        0, -1, 0, -1, 1,
                        0, -1, 0, -2, 1,
                        -2, 0, 0, 0, 2,
                        -2, 0, -2, 2, 0,
                        -1, 0, -2, 4, 0,
                        1, -2, 0, 0, 0,
                        0, 1, 0, 1, 1,
                        -1, 2, 0, 2, 0,
                        1, -1, 2, -2, 1,
                        1, 2, 2, -2, 2,
                        2, -1, 2, -2, 2,
                        1, 0, 2, -1, 1,
                        2, 1, 2, -2, 1,
                        -2, 0, 0, -2, 1,
                        1, -2, 2, 0, 2,
                        0, 1, 2, 1, 1,
                        1, 0, 4, -2, 1,
                        -2, 0, 4, 2, 2,
                        1, 1, 2, 1, 2,
                        1, 0, 0, 4, 0,
                        1, 0, 2, 2, 0,
                        2, 0, 2, 1, 2,
                        3, 1, 2, 0, 2,
                        4, 0, 2, 0, 1,
                        -2, -1, 2, 0, 0,
                        0, 1, -2, 2, 1,
                        1, 0, -2, 1, 0,
                        0, -1, -2, 2, 1,
                        2, -1, 0, -2, 1,
                        -1, 0, 2, -1, 2,
                        1, 0, 2, -3, 2,
                        0, 1, 2, -2, 3,
                        0, 0, 2, -3, 1,
                        -1, 0, -2, 2, 1,
                        0, 0, 2, -4, 2,
                        -2, 1, 0, 0, 1,
                        -1, 0, 0, -1, 1,
                        2, 0, 2, -4, 2,
                        0, 0, 4, -4, 4,
                        0, 0, 4, -4, 2,
                        -1, -2, 0, 2, 1,
                        -2, 0, 0, 3, 0,
                        1, 0, -2, 2, 1,
                        -3, 0, 2, 2, 2,
                        -3, 0, 2, 2, 1,
                        -2, 0, 2, 2, 0,
                        2, -1, 0, 0, 1,
                        -2, 1, 2, 2, 2,
                        1, 1, 0, 1, 0,
                        0, 1, 4, -2, 2,
                        -1, 1, 0, -2, 1,
                        0, 0, 0, -4, 1,
                        1, -1, 0, 2, 1,
                        1, 1, 0, 2, 1,
                        -1, 2, 2, 2, 2,
                        3, 1, 2, -2, 2,
                        0, -1, 0, 4, 0,
                        2, -1, 0, 2, 0,
                        0, 0, 4, 0, 1,
                        2, 0, 4, -2, 2,
                        -1, -1, 2, 4, 1,
                        1, 0, 0, 4, 1,
                        1, -2, 2, 2, 2,
                        0, 0, 2, 3, 2,
                        -1, 1, 2, 4, 2,
                        3, 0, 0, 2, 0,
                        -1, 0, 4, 2, 2,
                        1, 1, 2, 2, 1,
                        -2, 0, 2, 6, 2,
                        2, 1, 2, 2, 2,
                        -1, 0, 2, 6, 2,
                        1, 0, 2, 4, 1,
                        2, 0, 2, 4, 2,
                        1, 1, -2, 1, 0,
                        -3, 1, 2, 1, 2,
                        2, 0, -2, 0, 2,
                        -1, 0, 0, 1, 2,
                        -4, 0, 2, 2, 1,
                        -1, -1, 0, 1, 0,
                        0, 0, -2, 2, 2,
                        1, 0, 0, -1, 2,
                        0, -1, 2, -2, 3,
                        -2, 1, 2, 0, 0,
                        0, 0, 2, -2, 4,
                        -2, -2, 0, 2, 0,
                        -2, 0, -2, 4, 0,
                        0, -2, -2, 2, 0,
                        1, 2, 0, -2, 1,
                        3, 0, 0, -4, 1,
                        -1, 1, 2, -2, 2,
                        1, -1, 2, -4, 1,
                        1, 1, 0, -2, 2,
                        -3, 0, 2, 0, 0,
                        -3, 0, 2, 0, 2,
                        -2, 0, 0, 1, 0,
                        0, 0, -2, 1, 0,
                        -3, 0, 0, 2, 1,
                        -1, -1, -2, 2, 0,
                        0, 1, 2, -4, 1,
                        2, 1, 0, -4, 1,
                        0, 2, 0, -2, 1,
                        1, 0, 0, -3, 1,
                        -2, 0, 2, -2, 2,
                        -2, -1, 0, 0, 1,
                        -4, 0, 0, 2, 0,
                        1, 1, 0, -4, 1,
                        -1, 0, 2, -4, 1,
                        0, 0, 4, -4, 1,
                        0, 3, 2, -2, 2,
                        -3, -1, 0, 4, 0,
                        -3, 0, 0, 4, 1,
                        1, -1, -2, 2, 0,
                        -1, -1, 0, 2, 2,
                        1, -2, 0, 0, 1,
                        1, -1, 0, 0, 2,
                        0, 0, 0, 1, 2,
                        -1, -1, 2, 0, 0,
                        1, -2, 2, -2, 2,
                        0, -1, 2, -1, 1,
                        -1, 0, 2, 0, 3,
                        1, 1, 0, 0, 2,
                        -1, 1, 2, 0, 0,
                        1, 2, 0, 0, 0,
                        -1, 2, 2, 0, 2,
                        -1, 0, 4, -2, 1,
                        3, 0, 2, -4, 2,
                        1, 2, 2, -2, 1,
                        1, 0, 4, -4, 2,
                        -2, -1, 0, 4, 1,
                        0, -1, 0, 2, 2,
                        -2, 1, 0, 4, 0,
                        -2, -1, 2, 2, 1,
                        2, 0, -2, 2, 0,
                        1, 0, 0, 1, 1,
                        0, 1, 0, 2, 2,
                        1, -1, 2, -1, 2,
                        -2, 0, 4, 0, 1,
                        2, 1, 0, 0, 1,
                        0, 1, 2, 0, 0,
                        0, -1, 4, -2, 2,
                        0, 0, 4, -2, 4,
                        0, 2, 2, 0, 1,
                        -3, 0, 0, 6, 0,
                        -1, -1, 0, 4, 1,
                        1, -2, 0, 2, 0,
                        -1, 0, 0, 4, 2,
                        -1, -2, 2, 2, 1,
                        -1, 0, 0, -2, 2,
                        1, 0, -2, -2, 1,
                        0, 0, -2, -2, 1,
                        -2, 0, -2, 0, 1,
                        0, 0, 0, 3, 1,
                        0, 0, 0, 3, 0,
                        -1, 1, 0, 4, 0,
                        -1, -1, 2, 2, 0,
                        -2, 0, 2, 3, 2,
                        1, 0, 0, 2, 2,
                        0, -1, 2, 1, 2,
                        3, -1, 0, 0, 0,
                        2, 0, 0, 1, 0,
                        1, -1, 2, 0, 0,
                        0, 0, 2, 1, 0,
                        1, 0, 2, 0, 3,
                        3, 1, 0, 0, 0,
                        3, -1, 2, -2, 2,
                        2, 0, 2, -1, 1,
                        1, 1, 2, 0, 0,
                        0, 0, 4, -1, 2,
                        1, 2, 2, 0, 2,
                        -2, 0, 0, 6, 0,
                        0, -1, 0, 4, 1,
                        -2, -1, 2, 4, 1,
                        0, -2, 2, 2, 1,
                        0, -1, 2, 2, 0,
                        -1, 0, 2, 3, 1,
                        -2, 1, 2, 4, 2,
                        2, 0, 0, 2, 2,
                        2, -2, 2, 0, 2,
                        -1, 1, 2, 3, 2,
                        3, 0, 2, -1, 2,
                        4, 0, 2, -2, 1,
                        -1, 0, 0, 6, 0,
                        -1, -2, 2, 4, 2,
                        -3, 0, 2, 6, 2,
                        -1, 0, 2, 4, 0,
                        3, 0, 0, 2, 1,
                        3, -1, 2, 0, 1,
                        3, 0, 2, 0, 0,
                        1, 0, 4, 0, 2,
                        5, 0, 2, -2, 2,
                        0, -1, 2, 4, 1,
                        2, -1, 2, 2, 1,
                        0, 1, 2, 4, 2,
                        1, -1, 2, 4, 2,
                        3, -1, 2, 2, 2,
                        3, 0, 2, 2, 1,
                        5, 0, 2, 0, 2,
                        0, 0, 2, 6, 2,
                        4, 0, 2, 2, 2,
                        0, -1, 1, -1, 1,
                        -1, 0, 1, 0, 3,
                        0, -2, 2, -2, 3,
                        1, 0, -1, 0, 1,
                        2, -2, 0, -2, 1,
                        -1, 0, 1, 0, 2,
                        -1, 0, 1, 0, 1,
                        -1, -1, 2, -1, 2,
                        -2, 2, 0, 2, 2,
                        -1, 0, 1, 0, 0,
                        -4, 1, 2, 2, 2,
                        -3, 0, 2, 1, 1,
                        -2, -1, 2, 0, 2,
                        1, 0, -2, 1, 1,
                        2, -1, -2, 0, 1,
                        -4, 0, 2, 2, 0,
                        -3, 1, 0, 3, 0,
                        -1, 0, -1, 2, 0,
                        0, -2, 0, 0, 2,
                        0, -2, 0, 0, 2,
                        -3, 0, 0, 3, 0,
                        -2, -1, 0, 2, 2,
                        -1, 0, -2, 3, 0,
                        -4, 0, 0, 4, 0,
                        2, 1, -2, 0, 1,
                        2, -1, 0, -2, 2,
                        0, 0, 1, -1, 0,
                        -1, 2, 0, 1, 0,
                        -2, 1, 2, 0, 2,
                        1, 1, 0, -1, 1,
                        1, 0, 1, -2, 1,
                        0, 2, 0, 0, 2,
                        1, -1, 2, -3, 1,
                        -1, 1, 2, -1, 1,
                        -2, 0, 4, -2, 2,
                        -2, 0, 4, -2, 1,
                        -2, -2, 0, 2, 1,
                        -2, 0, -2, 4, 0,
                        1, 2, 2, -4, 1,
                        1, 1, 2, -4, 2,
                        -1, 2, 2, -2, 1,
                        2, 0, 0, -3, 1,
                        -1, 2, 0, 0, 1,
                        0, 0, 0, -2, 0,
                        -1, -1, 2, -2, 2,
                        -1, 1, 0, 0, 2,
                        0, 0, 0, -1, 2,
                        -2, 1, 0, 1, 0,
                        1, -2, 0, -2, 1,
                        1, 0, -2, 0, 2,
                        -3, 1, 0, 2, 0,
                        -1, 1, -2, 2, 0,
                        -1, -1, 0, 0, 2,
                        -3, 0, 0, 2, 0,
                        -3, -1, 0, 2, 0,
                        2, 0, 2, -6, 1,
                        0, 1, 2, -4, 2,
                        2, 0, 0, -4, 2,
                        -2, 1, 2, -2, 1,
                        0, -1, 2, -4, 1,
                        0, 1, 0, -2, 2,
                        -1, 0, 0, -2, 0,
                        2, 0, -2, -2, 1,
                        -4, 0, 2, 0, 1,
                        -1, -1, 0, -1, 1,
                        0, 0, -2, 0, 2,
                        -3, 0, 0, 1, 0,
                        -1, 0, -2, 1, 0,
                        -2, 0, -2, 2, 1,
                        0, 0, -4, 2, 0,
                        -2, -1, -2, 2, 0,
                        1, 0, 2, -6, 1,
                        -1, 0, 2, -4, 2,
                        1, 0, 0, -4, 2,
                        2, 1, 2, -4, 2,
                        2, 1, 2, -4, 1,
                        0, 1, 4, -4, 4,
                        0, 1, 4, -4, 2,
                        -1, -1, -2, 4, 0,
                        -1, -3, 0, 2, 0,
                        -1, 0, -2, 4, 1,
                        -2, -1, 0, 3, 0,
                        0, 0, -2, 3, 0,
                        -2, 0, 0, 3, 1,
                        0, -1, 0, 1, 0,
                        -3, 0, 2, 2, 0,
                        1, 1, -2, 2, 0,
                        -1, 1, 0, 2, 2,
                        1, -2, 2, -2, 1,
                        0, 0, 1, 0, 2,
                        0, 0, 1, 0, 1,
                        0, 0, 1, 0, 0,
                        -1, 2, 0, 2, 1,
                        0, 0, 2, 0, 2,
                        -2, 0, 2, 0, 2,
                        2, 0, 0, -1, 1,
                        3, 0, 0, -2, 1,
                        1, 0, 2, -2, 3,
                        1, 2, 0, 0, 1,
                        2, 0, 2, -3, 2,
                        -1, 1, 4, -2, 2,
                        -2, -2, 0, 4, 0,
                        0, -3, 0, 2, 0,
                        0, 0, -2, 4, 0,
                        -1, -1, 0, 3, 0,
                        -2, 0, 0, 4, 2,
                        -1, 0, 0, 3, 1,
                        2, -2, 0, 0, 0,
                        1, -1, 0, 1, 0,
                        -1, 0, 0, 2, 0,
                        0, -2, 2, 0, 1,
                        -1, 0, 1, 2, 1,
                        -1, 1, 0, 3, 0,
                        -1, -1, 2, 1, 2,
                        0, -1, 2, 0, 0,
                        -2, 1, 2, 2, 1,
                        2, -2, 2, -2, 2,
                        1, 1, 0, 1, 1,
                        1, 0, 1, 0, 1,
                        1, 0, 1, 0, 0,
                        0, 2, 0, 2, 0,
                        2, -1, 2, -2, 1,
                        0, -1, 4, -2, 1,
                        0, 0, 4, -2, 3,
                        0, 1, 4, -2, 1,
                        4, 0, 2, -4, 2,
                        2, 2, 2, -2, 2,
                        2, 0, 4, -4, 2,
                        -1, -2, 0, 4, 0,
                        -1, -3, 2, 2, 2,
                        -3, 0, 2, 4, 2,
                        -3, 0, 2, -2, 1,
                        -1, -1, 0, -2, 1,
                        -3, 0, 0, 0, 2,
                        -3, 0, -2, 2, 0,
                        0, 1, 0, -4, 1,
                        -2, 1, 0, -2, 1,
                        -4, 0, 0, 0, 1,
                        -1, 0, 0, -4, 1,
                        -3, 0, 0, -2, 1,
                        0, 0, 0, 3, 2,
                        -1, 1, 0, 4, 1,
                        1, -2, 2, 0, 1,
                        0, 1, 0, 3, 0,
                        -1, 0, 2, 2, 3,
                        0, 0, 2, 2, 2,
                        -2, 0, 2, 2, 2,
                        -1, 1, 2, 2, 0,
                        3, 0, 0, 0, 2,
                        2, 1, 0, 1, 0,
                        2, -1, 2, -1, 2,
                        0, 0, 2, 0, 1,
                        0, 0, 3, 0, 3,
                        0, 0, 3, 0, 2,
                        -1, 2, 2, 2, 1,
                        -1, 0, 4, 0, 0,
                        1, 2, 2, 0, 1,
                        3, 1, 2, -2, 1,
                        1, 1, 4, -2, 2,
                        -2, -1, 0, 6, 0,
                        0, -2, 0, 4, 0,
                        -2, 0, 0, 6, 1,
                        -2, -2, 2, 4, 2,
                        0, -3, 2, 2, 2,
                        0, 0, 0, 4, 2,
                        -1, -1, 2, 3, 2,
                        -2, 0, 2, 4, 0,
                        2, -1, 0, 2, 1,
                        1, 0, 0, 3, 0,
                        0, 1, 0, 4, 1,
                        0, 1, 0, 4, 0,
                        1, -1, 2, 1, 2,
                        0, 0, 2, 2, 3,
                        1, 0, 2, 2, 2,
                        -1, 0, 2, 2, 2,
                        -2, 0, 4, 2, 1,
                        2, 1, 0, 2, 1,
                        2, 1, 0, 2, 0,
                        2, -1, 2, 0, 0,
                        1, 0, 2, 1, 0,
                        0, 1, 2, 2, 0,
                        2, 0, 2, 0, 3,
                        3, 0, 2, 0, 2,
                        1, 0, 2, 0, 2,
                        1, 0, 3, 0, 3,
                        1, 1, 2, 1, 1,
                        0, 2, 2, 2, 2,
                        2, 1, 2, 0, 0,
                        2, 0, 4, -2, 1,
                        4, 1, 2, -2, 2,
                        -1, -1, 0, 6, 0,
                        -3, -1, 2, 6, 2,
                        -1, 0, 0, 6, 1,
                        -3, 0, 2, 6, 1,
                        1, -1, 0, 4, 1,
                        1, -1, 0, 4, 0,
                        -2, 0, 2, 5, 2,
                        1, -2, 2, 2, 1,
                        3, -1, 0, 2, 0,
                        1, -1, 2, 2, 0,
                        0, 0, 2, 3, 1,
                        -1, 1, 2, 4, 1,
                        0, 1, 2, 3, 2,
                        -1, 0, 4, 2, 1,
                        2, 0, 2, 1, 1,
                        5, 0, 0, 0, 0,
                        2, 1, 2, 1, 2,
                        1, 0, 4, 0, 1,
                        3, 1, 2, 0, 1,
                        3, 0, 4, -2, 2,
                        -2, -1, 2, 6, 2,
                        0, 0, 0, 6, 0,
                        0, -2, 2, 4, 2,
                        -2, 0, 2, 6, 1,
                        2, 0, 0, 4, 1,
                        2, 0, 0, 4, 0,
                        2, -2, 2, 2, 2,
                        0, 0, 2, 4, 0,
                        1, 0, 2, 3, 2,
                        4, 0, 0, 2, 0,
                        2, 0, 2, 2, 0,
                        0, 0, 4, 2, 2,
                        4, -1, 2, 0, 2,
                        3, 0, 2, 1, 2,
                        2, 1, 2, 2, 1,
                        4, 1, 2, 0, 2,
                        -1, -1, 2, 6, 2,
                        -1, 0, 2, 6, 1,
                        1, -1, 2, 4, 1,
                        1, 1, 2, 4, 2,
                        3, 1, 2, 2, 2,
                        5, 0, 2, 0, 1,
                        2, -1, 2, 4, 2,
                        2, 0, 2, 4, 1])

                # Luni - Solar nutation coefficients, unit 1e-7 arcsec longitude(sin, t % sin, cos), obliquity(cos, t % cos, sin)
                self.lunSolarNutationCoef = np.array([
                        -172064161, -174666, 33386, 92052331, 9086, 15377,
                        -13170906, -1675, -13696, 5730336, -3015, -4587,
                        -2276413, -234, 2796, 978459, -485, 1374,
                        2074554, 207, -698, -897492, 470, -291,
                        1475877, -3633, 11817, 73871, -184, -1924,
                        -516821, 1226, -524, 224386, -677, -174,
                        711159, 73, -872, -6750, 0, 358,
                        -387298, -367, 380, 200728, 18, 318,
                        -301461, -36, 816, 129025, -63, 367,
                        215829, -494, 111, -95929, 299, 132,
                        128227, 137, 181, -68982, -9, 39,
                        123457, 11, 19, -53311, 32, -4,
                        156994, 10, -168, -1235, 0, 82,
                        63110, 63, 27, -33228, 0, -9,
                        -57976, -63, -189, 31429, 0, -75,
                        -59641, -11, 149, 25543, -11, 66,
                        -51613, -42, 129, 26366, 0, 78,
                        45893, 50, 31, -24236, -10, 20,
                        63384, 11, -150, -1220, 0, 29,
                        -38571, -1, 158, 16452, -11, 68,
                        32481, 0, 0, -13870, 0, 0,
                        -47722, 0, -18, 477, 0, -25,
                        -31046, -1, 131, 13238, -11, 59,
                        28593, 0, -1, -12338, 10, -3,
                        20441, 21, 10, -10758, 0, -3,
                        29243, 0, -74, -609, 0, 13,
                        25887, 0, -66, -550, 0, 11,
                        -14053, -25, 79, 8551, -2, -45,
                        15164, 10, 11, -8001, 0, -1,
                        -15794, 72, -16, 6850, -42, -5,
                        21783, 0, 13, -167, 0, 13,
                        -12873, -10, -37, 6953, 0, -14,
                        -12654, 11, 63, 6415, 0, 26,
                        -10204, 0, 25, 5222, 0, 15,
                        16707, -85, -10, 168, -1, 10,
                        -7691, 0, 44, 3268, 0, 19,
                        -11024, 0, -14, 104, 0, 2,
                        7566, -21, -11, -3250, 0, -5,
                        -6637, -11, 25, 3353, 0, 14,
                        -7141, 21, 8, 3070, 0, 4,
                        -6302, -11, 2, 3272, 0, 4,
                        5800, 10, 2, -3045, 0, -1,
                        6443, 0, -7, -2768, 0, -4,
                        -5774, -11, -15, 3041, 0, -5,
                        -5350, 0, 21, 2695, 0, 12,
                        -4752, -11, -3, 2719, 0, -3,
                        -4940, -11, -21, 2720, 0, -9,
                        7350, 0, -8, -51, 0, 4,
                        4065, 0, 6, -2206, 0, 1,
                        6579, 0, -24, -199, 0, 2,
                        3579, 0, 5, -1900, 0, 1,
                        4725, 0, -6, -41, 0, 3,
                        -3075, 0, -2, 1313, 0, -1,
                        -2904, 0, 15, 1233, 0, 7,
                        4348, 0, -10, -81, 0, 2,
                        -2878, 0, 8, 1232, 0, 4,
                        -4230, 0, 5, -20, 0, -2,
                        -2819, 0, 7, 1207, 0, 3,
                        -4056, 0, 5, 40, 0, -2,
                        -2647, 0, 11, 1129, 0, 5,
                        -2294, 0, -10, 1266, 0, -4,
                        2481, 0, -7, -1062, 0, -3,
                        2179, 0, -2, -1129, 0, -2,
                        3276, 0, 1, -9, 0, 0,
                        -3389, 0, 5, 35, 0, -2,
                        3339, 0, -13, -107, 0, 1,
                        -1987, 0, -6, 1073, 0, -2,
                        -1981, 0, 0, 854, 0, 0,
                        4026, 0, -353, -553, 0, -139,
                        1660, 0, -5, -710, 0, -2,
                        -1521, 0, 9, 647, 0, 4,
                        1314, 0, 0, -700, 0, 0,
                        -1283, 0, 0, 672, 0, 0,
                        -1331, 0, 8, 663, 0, 4,
                        1383, 0, -2, -594, 0, -2,
                        1405, 0, 4, -610, 0, 2,
                        1290, 0, 0, -556, 0, 0,
                        -1214, 0, 5, 518, 0, 2,
                        1146, 0, -3, -490, 0, -1,
                        1019, 0, -1, -527, 0, -1,
                        -1100, 0, 9, 465, 0, 4,
                        -970, 0, 2, 496, 0, 1,
                        1575, 0, -6, -50, 0, 0,
                        934, 0, -3, -399, 0, -1,
                        922, 0, -1, -395, 0, -1,
                        815, 0, -1, -422, 0, -1,
                        834, 0, 2, -440, 0, 1,
                        1248, 0, 0, -170, 0, 1,
                        1338, 0, -5, -39, 0, 0,
                        716, 0, -2, -389, 0, -1,
                        1282, 0, -3, -23, 0, 1,
                        742, 0, 1, -391, 0, 0,
                        1020, 0, -25, -495, 0, -10,
                        715, 0, -4, -326, 0, 2,
                        -666, 0, -3, 369, 0, -1,
                        -667, 0, 1, 346, 0, 1,
                        -704, 0, 0, 304, 0, 0,
                        -694, 0, 5, 294, 0, 2,
                        -1014, 0, -1, 4, 0, -1,
                        -585, 0, -2, 316, 0, -1,
                        -949, 0, 1, 8, 0, -1,
                        -595, 0, 0, 258, 0, 0,
                        528, 0, 0, -279, 0, 0,
                        -590, 0, 4, 252, 0, 2,
                        570, 0, -2, -244, 0, -1,
                        -502, 0, 3, 250, 0, 2,
                        -875, 0, 1, 29, 0, 0,
                        -492, 0, -3, 275, 0, -1,
                        535, 0, -2, -228, 0, -1,
                        -467, 0, 1, 240, 0, 1,
                        591, 0, 0, -253, 0, 0,
                        -453, 0, -1, 244, 0, -1,
                        766, 0, 1, 9, 0, 0,
                        -446, 0, 2, 225, 0, 1,
                        -488, 0, 2, 207, 0, 1,
                        -468, 0, 0, 201, 0, 0,
                        -421, 0, 1, 216, 0, 1,
                        463, 0, 0, -200, 0, 0,
                        -673, 0, 2, 14, 0, 0,
                        658, 0, 0, -2, 0, 0,
                        -438, 0, 0, 188, 0, 0,
                        -390, 0, 0, 205, 0, 0,
                        639, -11, -2, -19, 0, 0,
                        412, 0, -2, -176, 0, -1,
                        -361, 0, 0, 189, 0, 0,
                        360, 0, -1, -185, 0, -1,
                        588, 0, -3, -24, 0, 0,
                        -578, 0, 1, 5, 0, 0,
                        -396, 0, 0, 171, 0, 0,
                        565, 0, -1, -6, 0, 0,
                        -335, 0, -1, 184, 0, -1,
                        357, 0, 1, -154, 0, 0,
                        321, 0, 1, -174, 0, 0,
                        -301, 0, -1, 162, 0, 0,
                        -334, 0, 0, 144, 0, 0,
                        493, 0, -2, -15, 0, 0,
                        494, 0, -2, -19, 0, 0,
                        337, 0, -1, -143, 0, -1,
                        280, 0, -1, -144, 0, 0,
                        309, 0, 1, -134, 0, 0,
                        -263, 0, 2, 131, 0, 1,
                        253, 0, 1, -138, 0, 0,
                        245, 0, 0, -128, 0, 0,
                        416, 0, -2, -17, 0, 0,
                        -229, 0, 0, 128, 0, 0,
                        231, 0, 0, -120, 0, 0,
                        -259, 0, 2, 109, 0, 1,
                        375, 0, -1, -8, 0, 0,
                        252, 0, 0, -108, 0, 0,
                        -245, 0, 1, 104, 0, 0,
                        243, 0, -1, -104, 0, 0,
                        208, 0, 1, -112, 0, 0,
                        199, 0, 0, -102, 0, 0,
                        -208, 0, 1, 105, 0, 0,
                        335, 0, -2, -14, 0, 0,
                        -325, 0, 1, 7, 0, 0,
                        -187, 0, 0, 96, 0, 0,
                        197, 0, -1, -100, 0, 0,
                        -192, 0, 2, 94, 0, 1,
                        -188, 0, 0, 83, 0, 0,
                        276, 0, 0, -2, 0, 0,
                        -286, 0, 1, 6, 0, 0,
                        186, 0, -1, -79, 0, 0,
                        -219, 0, 0, 43, 0, 0,
                        276, 0, 0, 2, 0, 0,
                        -153, 0, -1, 84, 0, 0,
                        -156, 0, 0, 81, 0, 0,
                        -154, 0, 1, 78, 0, 0,
                        -174, 0, 1, 75, 0, 0,
                        -163, 0, 2, 69, 0, 1,
                        -228, 0, 0, 1, 0, 0,
                        91, 0, -4, -54, 0, -2,
                        175, 0, 0, -75, 0, 0,
                        -159, 0, 0, 69, 0, 0,
                        141, 0, 0, -72, 0, 0,
                        147, 0, 0, -75, 0, 0,
                        -132, 0, 0, 69, 0, 0,
                        159, 0, -28, -54, 0, 11,
                        213, 0, 0, -4, 0, 0,
                        123, 0, 0, -64, 0, 0,
                        -118, 0, -1, 66, 0, 0,
                        144, 0, -1, -61, 0, 0,
                        -121, 0, 1, 60, 0, 0,
                        -134, 0, 1, 56, 0, 1,
                        -105, 0, 0, 57, 0, 0,
                        -102, 0, 0, 56, 0, 0,
                        120, 0, 0, -52, 0, 0,
                        101, 0, 0, -54, 0, 0,
                        -113, 0, 0, 59, 0, 0,
                        -106, 0, 0, 61, 0, 0,
                        -129, 0, 1, 55, 0, 0,
                        -114, 0, 0, 57, 0, 0,
                        113, 0, -1, -49, 0, 0,
                        -102, 0, 0, 44, 0, 0,
                        -94, 0, 0, 51, 0, 0,
                        -100, 0, -1, 56, 0, 0,
                        87, 0, 0, -47, 0, 0,
                        161, 0, 0, -1, 0, 0,
                        96, 0, 0, -50, 0, 0,
                        151, 0, -1, -5, 0, 0,
                        -104, 0, 0, 44, 0, 0,
                        -110, 0, 0, 48, 0, 0,
                        -100, 0, 1, 50, 0, 0,
                        92, 0, -5, 12, 0, -2,
                        82, 0, 0, -45, 0, 0,
                        82, 0, 0, -45, 0, 0,
                        -78, 0, 0, 41, 0, 0,
                        -77, 0, 0, 43, 0, 0,
                        2, 0, 0, 54, 0, 0,
                        94, 0, 0, -40, 0, 0,
                        -93, 0, 0, 40, 0, 0,
                        -83, 0, 10, 40, 0, -2,
                        83, 0, 0, -36, 0, 0,
                        -91, 0, 0, 39, 0, 0,
                        128, 0, 0, -1, 0, 0,
                        -79, 0, 0, 34, 0, 0,
                        -83, 0, 0, 47, 0, 0,
                        84, 0, 0, -44, 0, 0,
                        83, 0, 0, -43, 0, 0,
                        91, 0, 0, -39, 0, 0,
                        -77, 0, 0, 39, 0, 0,
                        84, 0, 0, -43, 0, 0,
                        -92, 0, 1, 39, 0, 0,
                        -92, 0, 1, 39, 0, 0,
                        -94, 0, 0, 0, 0, 0,
                        68, 0, 0, -36, 0, 0,
                        -61, 0, 0, 32, 0, 0,
                        71, 0, 0, -31, 0, 0,
                        62, 0, 0, -34, 0, 0,
                        -63, 0, 0, 33, 0, 0,
                        -73, 0, 0, 32, 0, 0,
                        115, 0, 0, -2, 0, 0,
                        -103, 0, 0, 2, 0, 0,
                        63, 0, 0, -28, 0, 0,
                        74, 0, 0, -32, 0, 0,
                        -103, 0, -3, 3, 0, -1,
                        -69, 0, 0, 30, 0, 0,
                        57, 0, 0, -29, 0, 0,
                        94, 0, 0, -4, 0, 0,
                        64, 0, 0, -33, 0, 0,
                        -63, 0, 0, 26, 0, 0,
                        -38, 0, 0, 20, 0, 0,
                        -43, 0, 0, 24, 0, 0,
                        -45, 0, 0, 23, 0, 0,
                        47, 0, 0, -24, 0, 0,
                        -48, 0, 0, 25, 0, 0,
                        45, 0, 0, -26, 0, 0,
                        56, 0, 0, -25, 0, 0,
                        88, 0, 0, 2, 0, 0,
                        -75, 0, 0, 0, 0, 0,
                        85, 0, 0, 0, 0, 0,
                        49, 0, 0, -26, 0, 0,
                        -74, 0, -3, -1, 0, -1,
                        -39, 0, 0, 21, 0, 0,
                        45, 0, 0, -20, 0, 0,
                        51, 0, 0, -22, 0, 0,
                        -40, 0, 0, 21, 0, 0,
                        41, 0, 0, -21, 0, 0,
                        -42, 0, 0, 24, 0, 0,
                        -51, 0, 0, 22, 0, 0,
                        -42, 0, 0, 22, 0, 0,
                        39, 0, 0, -21, 0, 0,
                        46, 0, 0, -18, 0, 0,
                        -53, 0, 0, 22, 0, 0,
                        82, 0, 0, -4, 0, 0,
                        81, 0, -1, -4, 0, 0,
                        47, 0, 0, -19, 0, 0,
                        53, 0, 0, -23, 0, 0,
                        -45, 0, 0, 22, 0, 0,
                        -44, 0, 0, -2, 0, 0,
                        -33, 0, 0, 16, 0, 0,
                        -61, 0, 0, 1, 0, 0,
                        28, 0, 0, -15, 0, 0,
                        -38, 0, 0, 19, 0, 0,
                        -33, 0, 0, 21, 0, 0,
                        -60, 0, 0, 0, 0, 0,
                        48, 0, 0, -10, 0, 0,
                        27, 0, 0, -14, 0, 0,
                        38, 0, 0, -20, 0, 0,
                        31, 0, 0, -13, 0, 0,
                        -29, 0, 0, 15, 0, 0,
                        28, 0, 0, -15, 0, 0,
                        -32, 0, 0, 15, 0, 0,
                        45, 0, 0, -8, 0, 0,
                        -44, 0, 0, 19, 0, 0,
                        28, 0, 0, -15, 0, 0,
                        -51, 0, 0, 0, 0, 0,
                        -36, 0, 0, 20, 0, 0,
                        44, 0, 0, -19, 0, 0,
                        26, 0, 0, -14, 0, 0,
                        -60, 0, 0, 2, 0, 0,
                        35, 0, 0, -18, 0, 0,
                        -27, 0, 0, 11, 0, 0,
                        47, 0, 0, -1, 0, 0,
                        36, 0, 0, -15, 0, 0,
                        -36, 0, 0, 20, 0, 0,
                        -35, 0, 0, 19, 0, 0,
                        -37, 0, 0, 19, 0, 0,
                        32, 0, 0, -16, 0, 0,
                        35, 0, 0, -14, 0, 0,
                        32, 0, 0, -13, 0, 0,
                        65, 0, 0, -2, 0, 0,
                        47, 0, 0, -1, 0, 0,
                        32, 0, 0, -16, 0, 0,
                        37, 0, 0, -16, 0, 0,
                        -30, 0, 0, 15, 0, 0,
                        -32, 0, 0, 16, 0, 0,
                        -31, 0, 0, 13, 0, 0,
                        37, 0, 0, -16, 0, 0,
                        31, 0, 0, -13, 0, 0,
                        49, 0, 0, -2, 0, 0,
                        32, 0, 0, -13, 0, 0,
                        23, 0, 0, -12, 0, 0,
                        -43, 0, 0, 18, 0, 0,
                        26, 0, 0, -11, 0, 0,
                        -32, 0, 0, 14, 0, 0,
                        -29, 0, 0, 14, 0, 0,
                        -27, 0, 0, 12, 0, 0,
                        30, 0, 0, 0, 0, 0,
                        -11, 0, 0, 5, 0, 0,
                        -21, 0, 0, 10, 0, 0,
                        -34, 0, 0, 15, 0, 0,
                        -10, 0, 0, 6, 0, 0,
                        -36, 0, 0, 0, 0, 0,
                        -9, 0, 0, 4, 0, 0,
                        -12, 0, 0, 5, 0, 0,
                        -21, 0, 0, 5, 0, 0,
                        -29, 0, 0, -1, 0, 0,
                        -15, 0, 0, 3, 0, 0,
                        -20, 0, 0, 0, 0, 0,
                        28, 0, 0, 0, 0, -2,
                        17, 0, 0, 0, 0, 0,
                        -22, 0, 0, 12, 0, 0,
                        -14, 0, 0, 7, 0, 0,
                        24, 0, 0, -11, 0, 0,
                        11, 0, 0, -6, 0, 0,
                        14, 0, 0, -6, 0, 0,
                        24, 0, 0, 0, 0, 0,
                        18, 0, 0, -8, 0, 0,
                        -38, 0, 0, 0, 0, 0,
                        -31, 0, 0, 0, 0, 0,
                        -16, 0, 0, 8, 0, 0,
                        29, 0, 0, 0, 0, 0,
                        -18, 0, 0, 10, 0, 0,
                        -10, 0, 0, 5, 0, 0,
                        -17, 0, 0, 10, 0, 0,
                        9, 0, 0, -4, 0, 0,
                        16, 0, 0, -6, 0, 0,
                        22, 0, 0, -12, 0, 0,
                        20, 0, 0, 0, 0, 0,
                        -13, 0, 0, 6, 0, 0,
                        -17, 0, 0, 9, 0, 0,
                        -14, 0, 0, 8, 0, 0,
                        0, 0, 0, -7, 0, 0,
                        14, 0, 0, 0, 0, 0,
                        19, 0, 0, -10, 0, 0,
                        -34, 0, 0, 0, 0, 0,
                        -20, 0, 0, 8, 0, 0,
                        9, 0, 0, -5, 0, 0,
                        -18, 0, 0, 7, 0, 0,
                        13, 0, 0, -6, 0, 0,
                        17, 0, 0, 0, 0, 0,
                        -12, 0, 0, 5, 0, 0,
                        15, 0, 0, -8, 0, 0,
                        -11, 0, 0, 3, 0, 0,
                        13, 0, 0, -5, 0, 0,
                        -18, 0, 0, 0, 0, 0,
                        -35, 0, 0, 0, 0, 0,
                        9, 0, 0, -4, 0, 0,
                        -19, 0, 0, 10, 0, 0,
                        -26, 0, 0, 11, 0, 0,
                        8, 0, 0, -4, 0, 0,
                        -10, 0, 0, 4, 0, 0,
                        10, 0, 0, -6, 0, 0,
                        -21, 0, 0, 9, 0, 0,
                        -15, 0, 0, 0, 0, 0,
                        9, 0, 0, -5, 0, 0,
                        -29, 0, 0, 0, 0, 0,
                        -19, 0, 0, 10, 0, 0,
                        12, 0, 0, -5, 0, 0,
                        22, 0, 0, -9, 0, 0,
                        -10, 0, 0, 5, 0, 0,
                        -20, 0, 0, 11, 0, 0,
                        -20, 0, 0, 0, 0, 0,
                        -17, 0, 0, 7, 0, 0,
                        15, 0, 0, -3, 0, 0,
                        8, 0, 0, -4, 0, 0,
                        14, 0, 0, 0, 0, 0,
                        -12, 0, 0, 6, 0, 0,
                        25, 0, 0, 0, 0, 0,
                        -13, 0, 0, 6, 0, 0,
                        -14, 0, 0, 8, 0, 0,
                        13, 0, 0, -5, 0, 0,
                        -17, 0, 0, 9, 0, 0,
                        -12, 0, 0, 6, 0, 0,
                        -10, 0, 0, 5, 0, 0,
                        10, 0, 0, -6, 0, 0,
                        -15, 0, 0, 0, 0, 0,
                        -22, 0, 0, 0, 0, 0,
                        28, 0, 0, -1, 0, 0,
                        15, 0, 0, -7, 0, 0,
                        23, 0, 0, -10, 0, 0,
                        12, 0, 0, -5, 0, 0,
                        29, 0, 0, -1, 0, 0,
                        -25, 0, 0, 1, 0, 0,
                        22, 0, 0, 0, 0, 0,
                        -18, 0, 0, 0, 0, 0,
                        15, 0, 0, 3, 0, 0,
                        -23, 0, 0, 0, 0, 0,
                        12, 0, 0, -5, 0, 0,
                        -8, 0, 0, 4, 0, 0,
                        -19, 0, 0, 0, 0, 0,
                        -10, 0, 0, 4, 0, 0,
                        21, 0, 0, -9, 0, 0,
                        23, 0, 0, -1, 0, 0,
                        -16, 0, 0, 8, 0, 0,
                        -19, 0, 0, 9, 0, 0,
                        -22, 0, 0, 10, 0, 0,
                        27, 0, 0, -1, 0, 0,
                        16, 0, 0, -8, 0, 0,
                        19, 0, 0, -8, 0, 0,
                        9, 0, 0, -4, 0, 0,
                        -9, 0, 0, 4, 0, 0,
                        -9, 0, 0, 4, 0, 0,
                        -8, 0, 0, 4, 0, 0,
                        18, 0, 0, -9, 0, 0,
                        16, 0, 0, -1, 0, 0,
                        -10, 0, 0, 4, 0, 0,
                        -23, 0, 0, 9, 0, 0,
                        16, 0, 0, -1, 0, 0,
                        -12, 0, 0, 6, 0, 0,
                        -8, 0, 0, 4, 0, 0,
                        30, 0, 0, -2, 0, 0,
                        24, 0, 0, -10, 0, 0,
                        10, 0, 0, -4, 0, 0,
                        -16, 0, 0, 7, 0, 0,
                        -16, 0, 0, 7, 0, 0,
                        17, 0, 0, -7, 0, 0,
                        -24, 0, 0, 10, 0, 0,
                        -12, 0, 0, 5, 0, 0,
                        -24, 0, 0, 11, 0, 0,
                        -23, 0, 0, 9, 0, 0,
                        -13, 0, 0, 5, 0, 0,
                        -15, 0, 0, 7, 0, 0,
                        0, 0, -1988, 0, 0, -1679,
                        0, 0, -63, 0, 0, -27,
                        -4, 0, 0, 0, 0, 0,
                        0, 0, 5, 0, 0, 4,
                        5, 0, 0, -3, 0, 0,
                        0, 0, 364, 0, 0, 176,
                        0, 0, -1044, 0, 0, -891,
                        -3, 0, 0, 1, 0, 0,
                        4, 0, 0, -2, 0, 0,
                        0, 0, 330, 0, 0, 0,
                        5, 0, 0, -2, 0, 0,
                        3, 0, 0, -2, 0, 0,
                        -3, 0, 0, 1, 0, 0,
                        -5, 0, 0, 2, 0, 0,
                        3, 0, 0, -1, 0, 0,
                        3, 0, 0, 0, 0, 0,
                        3, 0, 0, 0, 0, 0,
                        0, 0, 5, 0, 0, 0,
                        0, 0, 0, 1, 0, 0,
                        4, 0, 0, -2, 0, 0,
                        6, 0, 0, 0, 0, 0,
                        5, 0, 0, -2, 0, 0,
                        -7, 0, 0, 0, 0, 0,
                        -12, 0, 0, 0, 0, 0,
                        5, 0, 0, -3, 0, 0,
                        3, 0, 0, -1, 0, 0,
                        -5, 0, 0, 0, 0, 0,
                        3, 0, 0, 0, 0, 0,
                        -7, 0, 0, 3, 0, 0,
                        7, 0, 0, -4, 0, 0,
                        0, 0, -12, 0, 0, -10,
                        4, 0, 0, -2, 0, 0,
                        3, 0, 0, -2, 0, 0,
                        -3, 0, 0, 2, 0, 0,
                        -7, 0, 0, 3, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        -3, 0, 0, 1, 0, 0,
                        0, 0, 0, 0, 0, 0,
                        -3, 0, 0, 1, 0, 0,
                        7, 0, 0, -3, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        4, 0, 0, -2, 0, 0,
                        -5, 0, 0, 3, 0, 0,
                        5, 0, 0, 0, 0, 0,
                        -5, 0, 0, 2, 0, 0,
                        5, 0, 0, -2, 0, 0,
                        -8, 0, 0, 3, 0, 0,
                        9, 0, 0, 0, 0, 0,
                        6, 0, 0, -3, 0, 0,
                        -5, 0, 0, 2, 0, 0,
                        3, 0, 0, 0, 0, 0,
                        -7, 0, 0, 0, 0, 0,
                        -3, 0, 0, 1, 0, 0,
                        5, 0, 0, 0, 0, 0,
                        3, 0, 0, 0, 0, 0,
                        -3, 0, 0, 2, 0, 0,
                        4, 0, 0, -2, 0, 0,
                        3, 0, 0, -1, 0, 0,
                        -5, 0, 0, 2, 0, 0,
                        4, 0, 0, -2, 0, 0,
                        9, 0, 0, -3, 0, 0,
                        4, 0, 0, 0, 0, 0,
                        4, 0, 0, -2, 0, 0,
                        -3, 0, 0, 2, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        9, 0, 0, -3, 0, 0,
                        -4, 0, 0, 0, 0, 0,
                        -4, 0, 0, 0, 0, 0,
                        3, 0, 0, -2, 0, 0,
                        8, 0, 0, 0, 0, 0,
                        3, 0, 0, 0, 0, 0,
                        -3, 0, 0, 2, 0, 0,
                        3, 0, 0, -1, 0, 0,
                        3, 0, 0, -1, 0, 0,
                        -3, 0, 0, 1, 0, 0,
                        6, 0, 0, -3, 0, 0,
                        3, 0, 0, 0, 0, 0,
                        -3, 0, 0, 1, 0, 0,
                        -7, 0, 0, 0, 0, 0,
                        9, 0, 0, 0, 0, 0,
                        -3, 0, 0, 2, 0, 0,
                        -3, 0, 0, 0, 0, 0,
                        -4, 0, 0, 0, 0, 0,
                        -5, 0, 0, 3, 0, 0,
                        -13, 0, 0, 0, 0, 0,
                        -7, 0, 0, 0, 0, 0,
                        10, 0, 0, 0, 0, 0,
                        3, 0, 0, -1, 0, 0,
                        10, 0, 13, 6, 0, -5,
                        0, 0, 30, 0, 0, 14,
                        0, 0, -162, 0, 0, -138,
                        0, 0, 75, 0, 0, 0,
                        -7, 0, 0, 4, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        4, 0, 0, -2, 0, 0,
                        5, 0, 0, -2, 0, 0,
                        5, 0, 0, -3, 0, 0,
                        -3, 0, 0, 0, 0, 0,
                        -3, 0, 0, 2, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        -5, 0, 0, 2, 0, 0,
                        6, 0, 0, 0, 0, 0,
                        9, 0, 0, 0, 0, 0,
                        5, 0, 0, 0, 0, 0,
                        -7, 0, 0, 0, 0, 0,
                        -3, 0, 0, 1, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        7, 0, 0, 0, 0, 0,
                        -4, 0, 0, 0, 0, 0,
                        4, 0, 0, 0, 0, 0,
                        -6, 0, -3, 3, 0, 1,
                        0, 0, -3, 0, 0, -2,
                        11, 0, 0, 0, 0, 0,
                        3, 0, 0, -1, 0, 0,
                        11, 0, 0, 0, 0, 0,
                        -3, 0, 0, 2, 0, 0,
                        -1, 0, 3, 3, 0, -1,
                        4, 0, 0, -2, 0, 0,
                        0, 0, -13, 0, 0, -11,
                        3, 0, 6, 0, 0, 0,
                        -7, 0, 0, 0, 0, 0,
                        5, 0, 0, -3, 0, 0,
                        -3, 0, 0, 1, 0, 0,
                        3, 0, 0, 0, 0, 0,
                        5, 0, 0, -3, 0, 0,
                        -7, 0, 0, 3, 0, 0,
                        8, 0, 0, -3, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        11, 0, 0, 0, 0, 0,
                        -3, 0, 0, 1, 0, 0,
                        3, 0, 0, -1, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        8, 0, 0, -4, 0, 0,
                        3, 0, 0, -1, 0, 0,
                        11, 0, 0, 0, 0, 0,
                        -6, 0, 0, 3, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        -8, 0, 0, 4, 0, 0,
                        -7, 0, 0, 3, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        3, 0, 0, -1, 0, 0,
                        6, 0, 0, -3, 0, 0,
                        -6, 0, 0, 3, 0, 0,
                        6, 0, 0, 0, 0, 0,
                        6, 0, 0, -1, 0, 0,
                        5, 0, 0, -2, 0, 0,
                        -5, 0, 0, 2, 0, 0,
                        -4, 0, 0, 0, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        4, 0, 0, 0, 0, 0,
                        6, 0, 0, -3, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        0, 0, -26, 0, 0, -11,
                        0, 0, -10, 0, 0, -5,
                        5, 0, 0, -3, 0, 0,
                        -13, 0, 0, 0, 0, 0,
                        3, 0, 0, -2, 0, 0,
                        4, 0, 0, -2, 0, 0,
                        7, 0, 0, -3, 0, 0,
                        4, 0, 0, 0, 0, 0,
                        5, 0, 0, 0, 0, 0,
                        -3, 0, 0, 2, 0, 0,
                        -6, 0, 0, 2, 0, 0,
                        -5, 0, 0, 2, 0, 0,
                        -7, 0, 0, 3, 0, 0,
                        5, 0, 0, -2, 0, 0,
                        13, 0, 0, 0, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        -3, 0, 0, 0, 0, 0,
                        5, 0, 0, -2, 0, 0,
                        -11, 0, 0, 0, 0, 0,
                        5, 0, 0, -2, 0, 0,
                        4, 0, 0, 0, 0, 0,
                        4, 0, 0, -2, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        6, 0, 0, -3, 0, 0,
                        3, 0, 0, -2, 0, 0,
                        -12, 0, 0, 0, 0, 0,
                        4, 0, 0, 0, 0, 0,
                        -3, 0, 0, 0, 0, 0,
                        -4, 0, 0, 0, 0, 0,
                        3, 0, 0, 0, 0, 0,
                        3, 0, 0, -1, 0, 0,
                        -3, 0, 0, 1, 0, 0,
                        0, 0, -5, 0, 0, -2,
                        -7, 0, 0, 4, 0, 0,
                        6, 0, 0, -3, 0, 0,
                        -3, 0, 0, 0, 0, 0,
                        5, 0, 0, -3, 0, 0,
                        3, 0, 0, -1, 0, 0,
                        3, 0, 0, 0, 0, 0,
                        -3, 0, 0, 1, 0, 0,
                        -5, 0, 0, 3, 0, 0,
                        -3, 0, 0, 2, 0, 0,
                        -3, 0, 0, 2, 0, 0,
                        12, 0, 0, 0, 0, 0,
                        3, 0, 0, -1, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        4, 0, 0, 0, 0, 0,
                        6, 0, 0, 0, 0, 0,
                        5, 0, 0, -3, 0, 0,
                        4, 0, 0, -2, 0, 0,
                        -6, 0, 0, 3, 0, 0,
                        4, 0, 0, -2, 0, 0,
                        6, 0, 0, -3, 0, 0,
                        6, 0, 0, 0, 0, 0,
                        -6, 0, 0, 3, 0, 0,
                        3, 0, 0, -2, 0, 0,
                        7, 0, 0, -4, 0, 0,
                        4, 0, 0, -2, 0, 0,
                        -5, 0, 0, 2, 0, 0,
                        5, 0, 0, 0, 0, 0,
                        -6, 0, 0, 3, 0, 0,
                        -6, 0, 0, 3, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        10, 0, 0, 0, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        7, 0, 0, 0, 0, 0,
                        7, 0, 0, -3, 0, 0,
                        4, 0, 0, 0, 0, 0,
                        11, 0, 0, 0, 0, 0,
                        5, 0, 0, -2, 0, 0,
                        -6, 0, 0, 2, 0, 0,
                        4, 0, 0, -2, 0, 0,
                        3, 0, 0, -2, 0, 0,
                        5, 0, 0, -2, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        -4, 0, 0, 2, 0, 0,
                        -3, 0, 0, 2, 0, 0,
                        4, 0, 0, -2, 0, 0,
                        3, 0, 0, -1, 0, 0,
                        -3, 0, 0, 1, 0, 0,
                        -3, 0, 0, 1, 0, 0,
                        -3, 0, 0, 2, 0, 0])

                # Planetary argument multipliers:
                # L   L'  F   D   Om  Me  Ve  E  Ma  Ju  Sa  Ur  Ne  pre
                self.planetArgMult = np.array([
                        0, 0, 0, 0, 0, 0, 0, 8, -16, 4, 5, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -8, 16, -4, -5, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 8, -16, 4, 5, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 2, 2,
                        0, 0, 0, 0, 0, 0, 0, -4, 8, -1, -5, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 4, -8, 3, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, 0, 3, -8, 3, 0, 0, 0, 0,
                        -1, 0, 0, 0, 0, 0, 10, -3, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 6, -3, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -5, 8, -3, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -4, 8, -3, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 4, -8, 1, 5, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -5, 6, 4, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -5, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -5, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, 2, -5, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -5, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, -2, 5, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 5, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 5, 0, 0, 2,
                        2, 0, -1, -1, 0, 0, 0, 3, -7, 0, 0, 0, 0, 0,
                        1, 0, 0, -2, 0, 0, 19, -21, 3, 0, 0, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 2, -4, 0, -3, 0, 0, 0, 0,
                        1, 0, 0, -1, 1, 0, 0, -1, 0, 2, 0, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, -4, 10, 0, 0, 0,
                        -2, 0, 0, 2, 1, 0, 0, 2, 0, 0, -5, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 3, -7, 4, 0, 0, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 0, 1, 0, 1, -1, 0, 0, 0,
                        -2, 0, 0, 2, 1, 0, 0, 2, 0, -2, 0, 0, 0, 0,
                        -1, 0, 0, 0, 0, 0, 18, -16, 0, 0, 0, 0, 0, 0,
                        -2, 0, 1, 1, 2, 0, 0, 1, 0, -2, 0, 0, 0, 0,
                        -1, 0, 1, -1, 1, 0, 18, -17, 0, 0, 0, 0, 0, 0,
                        -1, 0, 0, 1, 1, 0, 0, 2, -2, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -8, 13, 0, 0, 0, 0, 0, 2,
                        0, 0, 2, -2, 2, 0, -8, 11, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -8, 13, 0, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, -8, 12, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 8, -13, 0, 0, 0, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 8, -14, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 8, -13, 0, 0, 0, 0, 0, 1,
                        -2, 0, 0, 2, 1, 0, 0, 2, 0, -4, 5, 0, 0, 0,
                        -2, 0, 0, 2, 2, 0, 3, -3, 0, 0, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 0, 2, 0, -3, 1, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 3, -5, 0, 2, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 0, 2, 0, -4, 3, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, -1, 2, 0, 0, 0, 0, 0,
                        0, 0, 1, -1, 2, 0, 0, -2, 2, 0, 0, 0, 0, 0,
                        -1, 0, 1, 0, 1, 0, 3, -5, 0, 0, 0, 0, 0, 0,
                        -1, 0, 0, 1, 0, 0, 3, -4, 0, 0, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 0, 2, 0, -2, -2, 0, 0, 0,
                        -2, 0, 2, 0, 2, 0, 0, -5, 9, 0, 0, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, 0, 0, -1, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, 0, 0, 0, 2, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
                        -1, 0, 0, 1, 0, 0, 0, 3, -4, 0, 0, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0,
                        0, 0, 1, -1, 2, 0, 0, -1, 0, 0, 2, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, -9, 17, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 2, 0, -3, 5, 0, 0, 0, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, -1, 2, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0,
                        1, 0, 0, -2, 0, 0, 17, -16, 0, -2, 0, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, 1, -3, 0, 0, 0,
                        -2, 0, 0, 2, 1, 0, 0, 5, -6, 0, 0, 0, 0, 0,
                        0, 0, -2, 2, 0, 0, 0, 9, -13, 0, 0, 0, 0, 0,
                        0, 0, 1, -1, 2, 0, 0, -1, 0, 0, 1, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0,
                        0, 0, -2, 2, 0, 0, 5, -6, 0, 0, 0, 0, 0, 0,
                        0, 0, -1, 1, 1, 0, 5, -7, 0, 0, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 6, -8, 0, 0, 0, 0, 0, 0,
                        2, 0, 1, -3, 1, 0, -6, 7, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0,
                        0, 0, -1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, 0, 0, 2, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -8, 15, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -8, 15, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, 0, -9, 15, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 8, -15, 0, 0, 0, 0, 0,
                        1, 0, -1, -1, 0, 0, 0, 8, -15, 0, 0, 0, 0, 0,
                        2, 0, 0, -2, 0, 0, 2, -5, 0, 0, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 0, 2, 0, -5, 5, 0, 0, 0,
                        2, 0, 0, -2, 1, 0, 0, -6, 8, 0, 0, 0, 0, 0,
                        2, 0, 0, -2, 1, 0, 0, -2, 0, 3, 0, 0, 0, 0,
                        -2, 0, 1, 1, 0, 0, 0, 1, 0, -3, 0, 0, 0, 0,
                        -2, 0, 1, 1, 1, 0, 0, 1, 0, -3, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 0, 2, 0, -3, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 0, 6, -8, 0, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 0, 2, 0, -1, -5, 0, 0, 0,
                        -1, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0,
                        -1, 0, 1, 1, 1, 0, -20, 20, 0, 0, 0, 0, 0, 0,
                        1, 0, 0, -2, 0, 0, 20, -21, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, 8, -15, 0, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, 0, -10, 15, 0, 0, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,
                        0, 0, 1, -1, 2, 0, 0, -1, 0, 1, 0, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, -2, 4, 0, 0, 0,
                        2, 0, 0, -2, 1, 0, -6, 8, 0, 0, 0, 0, 0, 0,
                        0, 0, -2, 2, 1, 0, 5, -6, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, 0, -1, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, 0, 1, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2,
                        0, 0, 2, -2, 1, 0, 0, -9, 13, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, 7, -13, 0, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 0, 5, -6, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 9, -17, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -9, 17, 0, 0, 0, 0, 2,
                        1, 0, 0, -1, 1, 0, 0, -3, 4, 0, 0, 0, 0, 0,
                        1, 0, 0, -1, 1, 0, -3, 4, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 2, 0, 0, -1, 2, 0, 0, 0, 0, 0,
                        0, 0, -1, 1, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0,
                        0, 0, -2, 2, 0, 1, 0, -2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 3, -5, 0, 2, 0, 0, 0, 0,
                        -2, 0, 0, 2, 1, 0, 0, 2, 0, -3, 1, 0, 0, 0,
                        -2, 0, 0, 2, 1, 0, 3, -3, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 8, -13, 0, 0, 0, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 8, -12, 0, 0, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, -8, 11, 0, 0, 0, 0, 0, 0,
                        -1, 0, 0, 1, 0, 0, 0, 2, -2, 0, 0, 0, 0, 0,
                        -1, 0, 0, 0, 1, 0, 18, -16, 0, 0, 0, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, -1, 1, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 3, -7, 4, 0, 0, 0, 0, 0,
                        -2, 0, 1, 1, 1, 0, 0, -3, 7, 0, 0, 0, 0, 0,
                        0, 0, 1, -1, 2, 0, 0, -1, 0, -2, 5, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, 0, 0, -2, 5, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, -4, 8, -3, 0, 0, 0, 0,
                        1, 0, 0, 0, 1, 0, -10, 3, 0, 0, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, 0, -2, 0, 0, 0, 0, 0, 0,
                        -1, 0, 0, 0, 1, 0, 10, -3, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, 4, -8, 3, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, 0, 0, 2, -5, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 0, 1, 0, 2, -5, 0, 0, 0,
                        2, 0, -1, -1, 1, 0, 0, 3, -7, 0, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 0, 2, 0, 0, -5, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, -3, 7, -4, 0, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0,
                        1, 0, 0, 0, 1, 0, -18, 16, 0, 0, 0, 0, 0, 0,
                        -2, 0, 1, 1, 1, 0, 0, 1, 0, -2, 0, 0, 0, 0,
                        0, 0, 1, -1, 2, 0, -8, 12, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, -8, 13, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, 0, 0, -2, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -2, 2, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -1, 2, 0, 0, 0, 0, 1,
                        -1, 0, 0, 1, 1, 0, 3, -4, 0, 0, 0, 0, 0, 0,
                        -1, 0, 0, 1, 1, 0, 0, 3, -4, 0, 0, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, 0, -2, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, 0, 2, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2,
                        0, 0, 1, -1, 0, 0, 3, -6, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, -3, 5, 0, 0, 0, 0, 0, 0,
                        0, 0, 1, -1, 2, 0, -3, 4, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, -2, 4, 0, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, -5, 6, 0, 0, 0, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 5, -7, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 5, -8, 0, 0, 0, 0, 0, 0,
                        -2, 0, 0, 2, 1, 0, 6, -8, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, -8, 15, 0, 0, 0, 0, 0,
                        -2, 0, 0, 2, 1, 0, 0, 2, 0, -3, 0, 0, 0, 0,
                        -2, 0, 0, 2, 1, 0, 0, 6, -8, 0, 0, 0, 0, 0,
                        1, 0, 0, -1, 1, 0, 0, -1, 0, 1, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -5, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, -1, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, 1, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2,
                        0, 0, 1, -1, 2, 0, 0, -1, 0, 0, -1, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -7, 13, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 7, -13, 0, 0, 0, 0, 0,
                        2, 0, 0, -2, 1, 0, 0, -5, 6, 0, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, 0, -8, 11, 0, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, -1, 0, 2, 0, 0, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -2, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, 0, 3, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,
                        -2, 0, 0, 2, 0, 0, 3, -3, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 2, 0, 0, -4, 8, -3, 0, 0, 0, 0,
                        0, 0, 0, 0, 2, 0, 0, 4, -8, 3, 0, 0, 0, 0,
                        2, 0, 0, -2, 1, 0, 0, -2, 0, 2, 0, 0, 0, 0,
                        0, 0, 1, -1, 2, 0, 0, -1, 0, 2, 0, 0, 0, 0,
                        0, 0, 1, -1, 2, 0, 0, 0, -2, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, 1, -2, 0, 0, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 0, 2, -2, 0, 0, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 0, 1, 0, 0, -2, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, 0, -2, 0, 0, 2, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, 3, -6, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 3, -5, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 3, -5, 0, 0, 0, 0, 0, 0,
                        0, 0, 1, -1, 1, 0, -3, 4, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -3, 5, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, -3, 5, 0, 0, 0, 0, 0, 2,
                        0, 0, 2, -2, 2, 0, -3, 3, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -3, 5, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, -4, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, 0, 1, -4, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 2, -4, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -2, 4, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, 0, -3, 4, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -2, 4, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, -2, 4, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -5, 8, 0, 0, 0, 0, 0, 2,
                        0, 0, 2, -2, 2, 0, -5, 6, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -5, 8, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -5, 8, 0, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, -5, 7, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -5, 8, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 5, -8, 0, 0, 0, 0, 0, 0,
                        0, 0, 1, -1, 2, 0, 0, -1, 0, -1, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, 0, -2, 0, 1, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -6, 11, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 6, -11, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, -1, 0, 4, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 1, 0, -4, 0, 0, 0, 0, 0, 0,
                        2, 0, 0, -2, 1, 0, -3, 3, 0, 0, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 0, 2, 0, 0, -2, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, 0, -7, 9, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 4, -5, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, 2, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2,
                        0, 0, 2, -2, 2, 0, 0, -2, 0, 2, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 2,
                        0, 0, 0, 0, 1, 0, 3, -5, 0, 0, 0, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 3, -4, 0, 0, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, -3, 3, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, 2, -4, 0, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, 0, -4, 4, 0, 0, 0, 0, 0,
                        0, 0, 1, -1, 2, 0, -5, 7, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 3, -6, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -3, 6, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, 0, -4, 6, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -3, 6, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, -3, 6, 0, 0, 0, 0, 2,
                        0, 0, -1, 1, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 2, -3, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -5, 9, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -5, 9, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 5, -9, 0, 0, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 0, 1, 0, -2, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, 0, -2, 0, 2, 0, 0, 0, 0,
                        -2, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                        0, 0, -2, 2, 0, 0, 3, -3, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -6, 10, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, -6, 10, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -2, 3, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -2, 3, 0, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, -2, 2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 2, -3, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 2, -3, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, 0, -1, 0, 3, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 4, -8, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -4, 8, 0, 0, 0, 0, 2,
                        0, 0, -2, 2, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -4, 7, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -4, 7, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 4, -7, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, -2, 3, 0, 0, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, 0, -2, 0, 3, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -5, 10, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 1, 0, -1, 2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -3, 5, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -3, 5, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 3, -5, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, 1, -3, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 1, -2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -7, 11, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -7, 11, 0, 0, 0, 0, 0, 1,
                        0, 0, -2, 2, 0, 0, 4, -4, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 2, -3, 0, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, -4, 4, 0, 0, 0, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 4, -5, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -4, 7, 0, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, -4, 6, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -4, 7, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -4, 6, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -4, 6, 0, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, -4, 5, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -4, 6, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 4, -6, 0, 0, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
                        0, 0, -1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -1, 0, 5, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 1, -3, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -1, 3, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -7, 12, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, 1, -2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -2, 5, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -1, 0, 4, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, -4, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, -1, 1, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -6, 10, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -6, 10, 0, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, 0, -3, 0, 3, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -3, 7, 0, 0, 0, 0, 2,
                        -2, 0, 0, 2, 0, 0, 4, -4, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -5, 8, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 5, -8, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -1, 0, 3, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -1, 0, 3, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, -3, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 2, -4, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -2, 4, 0, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, -2, 3, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -2, 4, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -6, 9, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -6, 9, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 6, -9, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, 1, 0, -2, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, -2, 2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -4, 6, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 4, -6, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 3, -4, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -1, 0, 2, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, -2, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, 1, 0, -1, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -5, 9, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 3, -4, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -3, 4, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -3, 4, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 3, -4, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 3, -4, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 1, 0, 0, 2, -2, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, -1, 0, 2, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -3, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, 1, -5, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, -3, 5, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, -3, 4, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -2, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 2, -2, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, -1, 0, 1, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, -2, 2, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -8, 14, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, 2, -5, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 5, -8, 3, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 5, -8, 3, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 3, -8, 3, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -3, 8, -3, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, -2, 5, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -8, 12, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -8, 12, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, 1, -2, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 2,
                        0, 0, 2, -2, 1, 0, -5, 5, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 3, -6, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -3, 6, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, -3, 6, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -1, 4, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -5, 7, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -5, 7, 0, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, -5, 6, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 5, -7, 0, 0, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, 0, -1, 0, 1, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, -1, 0, 3, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -2, 6, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 1, 0, 2, -2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -6, 9, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 6, -9, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -2, 2, 0, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, -2, 1, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 2, -2, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -5, 7, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 5, -7, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, -2, 2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 4, -5, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 1, -3, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -1, 3, 0, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, -1, 2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -1, 3, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -7, 10, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -7, 10, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -4, 8, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -4, 5, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -4, 5, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 4, -5, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -2, 0, 5, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -9, 13, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -1, 5, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -2, 0, 4, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, -4, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -2, 7, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, -3, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -2, 5, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, -2, 5, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -6, 8, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -6, 8, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 6, -8, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 1, 0, 0, 2, 0, -2, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -3, 9, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 5, -6, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 5, -6, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, -2, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, -2, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -5, 10, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -3, 3, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, 0, -3, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, -5, 13, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, -1, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, -1, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, 0, -2, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, 0, -2, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 3, -2, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 3, -2, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, 0, -1, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -6, 15, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -8, 15, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -3, 9, -4, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, 2, -5, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -2, 8, -1, -5, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 6, -8, 3, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1,
                        0, 0, 1, -1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -6, 16, -4, -5, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -2, 8, -3, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -2, 8, -3, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 6, -8, 1, 5, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, -2, 5, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 3, -5, 4, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -8, 11, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -8, 11, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, -8, 11, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 3, -3, 0, 2, 0, 0, 0, 2,
                        0, 0, 2, -2, 1, 0, 0, 4, -8, 3, 0, 0, 0, 0,
                        0, 0, 1, -1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, 0, -4, 8, -3, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -3, 7, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -5, 6, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -5, 6, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 5, -6, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 5, -6, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -1, 6, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 7, -9, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 2, -1, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 6, -7, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 5, -5, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -7, 9, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -7, 9, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 4, -3, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -4, 4, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 4, -4, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -3, 0, 5, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -9, 12, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 3, 0, -4, 0, 0, 0, 0,
                        0, 0, 2, -2, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 7, -8, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 3, 0, -3, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 3, 0, -3, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -2, 6, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -6, 7, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 6, -7, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 6, -6, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 3, 0, -2, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 3, 0, -2, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 5, -4, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 3, -2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 3, -2, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 3, 0, -1, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 3, 0, -1, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 3, 0, 0, -2, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 4, -2, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 3, 0, 0, -1, 0, 0, 2,
                        0, 0, 2, -2, 1, 0, 0, 1, 0, -1, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, -8, 16, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 3, 0, 2, -5, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 7, -8, 3, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -5, 16, -4, -5, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, -1, 8, -3, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -8, 10, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -8, 10, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, -8, 10, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -3, 8, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -5, 5, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 5, -5, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 5, -5, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 5, -5, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 7, -7, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 7, -7, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 6, -5, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 7, -8, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 5, -3, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 4, -3, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -9, 11, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -9, 11, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 4, 0, -4, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 4, 0, -3, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -6, 6, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 6, -6, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 6, -6, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 4, 0, -2, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 6, -4, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 4, 0, -1, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 4, 0, 0, -2, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 5, -2, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 8, -9, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 5, -4, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, -7, 7, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 7, -7, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 4, -2, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 4, -2, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 4, -2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 4, -2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 5, 0, -4, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 5, 0, -3, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 5, 0, -2, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -8, 8, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 8, -8, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 5, -3, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 5, -3, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, -9, 9, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, -9, 9, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, -9, 9, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 6, -4, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1,
                        0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 2,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
                        1, 0, 0, -2, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0,
                        1, 0, 0, -2, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0,
                        1, 0, 0, -2, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0,
                        1, 0, 0, -2, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0,
                        -1, 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, 0, 0, 0,
                        -1, 0, 0, 0, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0,
                        -1, 0, 0, 2, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0,
                        1, 0, 0, -2, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0,
                        -2, 0, 0, 2, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0,
                        -1, 0, 0, 0, 0, 0, 0, 2, 0, -3, 0, 0, 0, 0,
                        -1, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0,
                        -1, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0,
                        -1, 0, 0, 2, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0,
                        1, 0, -1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                        -1, 0, 0, 2, 0, 0, 0, 2, 0, -3, 0, 0, 0, 0,
                        -2, 0, 0, 0, 0, 0, 0, 2, 0, -3, 0, 0, 0, 0,
                        1, 0, 0, 0, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0,
                        -1, 0, 1, -1, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0,
                        1, 0, 1, -1, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0,
                        -1, 0, 0, 0, 0, 0, 0, 4, -8, 3, 0, 0, 0, 0,
                        -1, 0, 0, 2, 1, 0, 0, 2, 0, -2, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0,
                        -1, 0, 0, 2, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0,
                        -1, 0, 0, 2, 0, 0, 3, -3, 0, 0, 0, 0, 0, 0,
                        1, 0, 0, -2, 1, 0, 0, -2, 0, 2, 0, 0, 0, 0,
                        1, 0, 2, -2, 2, 0, -3, 3, 0, 0, 0, 0, 0, 0,
                        1, 0, 2, -2, 2, 0, 0, -2, 0, 2, 0, 0, 0, 0,
                        1, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0,
                        1, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0,
                        0, 0, 0, -2, 0, 0, 2, -2, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, -2, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0,
                        0, 0, 2, 0, 2, 0, -2, 2, 0, 0, 0, 0, 0, 0,
                        0, 0, 2, 0, 2, 0, 0, -1, 0, 1, 0, 0, 0, 0,
                        0, 0, 2, 0, 2, 0, -1, 1, 0, 0, 0, 0, 0, 0,
                        0, 0, 2, 0, 2, 0, -2, 3, 0, 0, 0, 0, 0, 0,
                        0, 0, 0, 2, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0,
                        0, 0, 1, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                        1, 0, 2, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                        -1, 0, 2, 0, 2, 0, 10, -3, 0, 0, 0, 0, 0, 0,
                        0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                        1, 0, 2, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                        0, 0, 2, 0, 2, 0, 0, 4, -8, 3, 0, 0, 0, 0,
                        0, 0, 2, 0, 2, 0, 0, -4, 8, -3, 0, 0, 0, 0,
                        -1, 0, 2, 0, 2, 0, 0, -4, 8, -3, 0, 0, 0, 0,
                        2, 0, 2, -2, 2, 0, 0, -2, 0, 3, 0, 0, 0, 0,
                        1, 0, 2, 0, 1, 0, 0, -2, 0, 3, 0, 0, 0, 0,
                        0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                        -1, 0, 2, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                        -2, 0, 2, 2, 2, 0, 0, 2, 0, -2, 0, 0, 0, 0,
                        0, 0, 2, 0, 2, 0, 2, -3, 0, 0, 0, 0, 0, 0,
                        0, 0, 2, 0, 2, 0, 1, -1, 0, 0, 0, 0, 0, 0,
                        0, 0, 2, 0, 2, 0, 0, 1, 0, -1, 0, 0, 0, 0,
                        0, 0, 2, 0, 2, 0, 2, -2, 0, 0, 0, 0, 0, 0,
                        -1, 0, 2, 2, 2, 0, 0, -1, 0, 1, 0, 0, 0, 0,
                        1, 0, 2, 0, 2, 0, -1, 1, 0, 0, 0, 0, 0, 0,
                        -1, 0, 2, 2, 2, 0, 0, 2, 0, -3, 0, 0, 0, 0,
                        2, 0, 2, 0, 2, 0, 0, 2, 0, -3, 0, 0, 0, 0,
                        1, 0, 2, 0, 2, 0, 0, -4, 8, -3, 0, 0, 0, 0,
                        1, 0, 2, 0, 2, 0, 0, 4, -8, 3, 0, 0, 0, 0,
                        1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                        0, 0, 2, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                        2, 0, 2, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                        -1, 0, 2, 2, 2, 0, 0, 2, 0, -2, 0, 0, 0, 0,
                        -1, 0, 2, 2, 2, 0, 3, -3, 0, 0, 0, 0, 0, 0,
                        1, 0, 2, 0, 2, 0, 1, -1, 0, 0, 0, 0, 0, 0,
                        0, 0, 2, 2, 2, 0, 0, 2, 0, -2, 0, 0, 0, 0])

                # Planetary nutation coefficients, unit 1e-7 arcsec longitude(sin, cos), obliquity(sin, cos)
                self.planetNutationCoef = np.array([
                        1440, 0, 0, 0,
                        56, -117, -42, -40,
                        125, -43, 0, -54,
                        0, 5, 0, 0,
                        3, -7, -3, 0,
                        3, 0, 0, -2,
                        -114, 0, 0, 61,
                        -219, 89, 0, 0,
                        -3, 0, 0, 0,
                        -462, 1604, 0, 0,
                        99, 0, 0, -53,
                        -3, 0, 0, 2,
                        0, 6, 2, 0,
                        3, 0, 0, 0,
                        -12, 0, 0, 0,
                        14, -218, 117, 8,
                        31, -481, -257, -17,
                        -491, 128, 0, 0,
                        -3084, 5123, 2735, 1647,
                        -1444, 2409, -1286, -771,
                        11, -24, -11, -9,
                        26, -9, 0, 0,
                        103, -60, 0, 0,
                        0, -13, -7, 0,
                        -26, -29, -16, 14,
                        9, -27, -14, -5,
                        12, 0, 0, -6,
                        -7, 0, 0, 0,
                        0, 24, 0, 0,
                        284, 0, 0, -151,
                        226, 101, 0, 0,
                        0, -8, -2, 0,
                        0, -6, -3, 0,
                        5, 0, 0, -3,
                        -41, 175, 76, 17,
                        0, 15, 6, 0,
                        425, 212, -133, 269,
                        1200, 598, 319, -641,
                        235, 334, 0, 0,
                        11, -12, -7, -6,
                        5, -6, 3, 3,
                        -5, 0, 0, 3,
                        6, 0, 0, -3,
                        15, 0, 0, 0,
                        13, 0, 0, -7,
                        -6, -9, 0, 0,
                        266, -78, 0, 0,
                        -460, -435, -232, 246,
                        0, 15, 7, 0,
                        -3, 0, 0, 2,
                        0, 131, 0, 0,
                        4, 0, 0, 0,
                        0, 3, 0, 0,
                        0, 4, 2, 0,
                        0, 3, 0, 0,
                        -17, -19, -10, 9,
                        -9, -11, 6, -5,
                        -6, 0, 0, 3,
                        -16, 8, 0, 0,
                        0, 3, 0, 0,
                        11, 24, 11, -5,
                        -3, -4, -2, 1,
                        3, 0, 0, -1,
                        0, -8, -4, 0,
                        0, 3, 0, 0,
                        0, 5, 0, 0,
                        0, 3, 2, 0,
                        -6, 4, 2, 3,
                        -3, -5, 0, 0,
                        -5, 0, 0, 2,
                        4, 24, 13, -2,
                        -42, 20, 0, 0,
                        -10, 233, 0, 0,
                        -3, 0, 0, 1,
                        78, -18, 0, 0,
                        0, 3, 1, 0,
                        0, -3, -1, 0,
                        0, -4, -2, 1,
                        0, -8, -4, -1,
                        0, -5, 3, 0,
                        -7, 0, 0, 3,
                        -14, 8, 3, 6,
                        0, 8, -4, 0,
                        0, 19, 10, 0,
                        45, -22, 0, 0,
                        -3, 0, 0, 0,
                        0, -3, 0, 0,
                        0, 3, 0, 0,
                        3, 5, 3, -2,
                        89, -16, -9, -48,
                        0, 3, 0, 0,
                        -3, 7, 4, 2,
                        -349, -62, 0, 0,
                        -15, 22, 0, 0,
                        -3, 0, 0, 0,
                        -53, 0, 0, 0,
                        5, 0, 0, -3,
                        0, -8, 0, 0,
                        15, -7, -4, -8,
                        -3, 0, 0, 1,
                        -21, -78, 0, 0,
                        20, -70, -37, -11,
                        0, 6, 3, 0,
                        5, 3, 2, -2,
                        -17, -4, -2, 9,
                        0, 6, 3, 0,
                        32, 15, -8, 17,
                        174, 84, 45, -93,
                        11, 56, 0, 0,
                        -66, -12, -6, 35,
                        47, 8, 4, -25,
                        0, 8, 4, 0,
                        10, -22, -12, -5,
                        -3, 0, 0, 2,
                        -24, 12, 0, 0,
                        5, -6, 0, 0,
                        3, 0, 0, -2,
                        4, 3, 1, -2,
                        0, 29, 15, 0,
                        -5, -4, -2, 2,
                        8, -3, -1, -5,
                        0, -3, 0, 0,
                        10, 0, 0, 0,
                        3, 0, 0, -2,
                        -5, 0, 0, 3,
                        46, 66, 35, -25,
                        -14, 7, 0, 0,
                        0, 3, 2, 0,
                        -5, 0, 0, 0,
                        -68, -34, -18, 36,
                        0, 14, 7, 0,
                        10, -6, -3, -5,
                        -5, -4, -2, 3,
                        -3, 5, 2, 1,
                        76, 17, 9, -41,
                        84, 298, 159, -45,
                        3, 0, 0, -1,
                        -3, 0, 0, 2,
                        -3, 0, 0, 1,
                        -82, 292, 156, 44,
                        -73, 17, 9, 39,
                        -9, -16, 0, 0,
                        3, 0, -1, -2,
                        -3, 0, 0, 0,
                        -9, -5, -3, 5,
                        -439, 0, 0, 0,
                        57, -28, -15, -30,
                        0, -6, -3, 0,
                        -4, 0, 0, 2,
                        -40, 57, 30, 21,
                        23, 7, 3, -13,
                        273, 80, 43, -146,
                        -449, 430, 0, 0,
                        -8, -47, -25, 4,
                        6, 47, 25, -3,
                        0, 23, 13, 0,
                        -3, 0, 0, 2,
                        3, -4, -2, -2,
                        -48, -110, -59, 26,
                        51, 114, 61, -27,
                        -133, 0, 0, 57,
                        0, 4, 0, 0,
                        -21, -6, -3, 11,
                        0, -3, -1, 0,
                        -11, -21, -11, 6,
                        -18, -436, -233, 9,
                        35, -7, 0, 0,
                        0, 5, 3, 0,
                        11, -3, -1, -6,
                        -5, -3, -1, 3,
                        -53, -9, -5, 28,
                        0, 3, 2, 1,
                        4, 0, 0, -2,
                        0, -4, 0, 0,
                        -50, 194, 103, 27,
                        -13, 52, 28, 7,
                        -91, 248, 0, 0,
                        6, 49, 26, -3,
                        -6, -47, -25, 3,
                        0, 5, 3, 0,
                        52, 23, 10, -23,
                        -3, 0, 0, 1,
                        0, 5, 3, 0,
                        -4, 0, 0, 0,
                        -4, 8, 3, 2,
                        10, 0, 0, 0,
                        3, 0, 0, -2,
                        0, 8, 4, 0,
                        0, 8, 4, 1,
                        -4, 0, 0, 0,
                        -4, 0, 0, 0,
                        -8, 4, 2, 4,
                        8, -4, -2, -4,
                        0, 15, 7, 0,
                        -138, 0, 0, 0,
                        0, -7, -3, 0,
                        0, -7, -3, 0,
                        54, 0, 0, -29,
                        0, 10, 4, 0,
                        -7, 0, 0, 3,
                        -37, 35, 19, 20,
                        0, 4, 0, 0,
                        -4, 9, 0, 0,
                        8, 0, 0, -4,
                        -9, -14, -8, 5,
                        -3, -9, -5, 3,
                        -145, 47, 0, 0,
                        -10, 40, 21, 5,
                        11, -49, -26, -7,
                        -2150, 0, 0, 932,
                        -12, 0, 0, 5,
                        85, 0, 0, -37,
                        4, 0, 0, -2,
                        3, 0, 0, -2,
                        -86, 153, 0, 0,
                        -6, 9, 5, 3,
                        9, -13, -7, -5,
                        -8, 12, 6, 4,
                        -51, 0, 0, 22,
                        -11, -268, -116, 5,
                        0, 12, 5, 0,
                        0, 7, 3, 0,
                        31, 6, 3, -17,
                        140, 27, 14, -75,
                        57, 11, 6, -30,
                        -14, -39, 0, 0,
                        0, -6, -2, 0,
                        4, 15, 8, -2,
                        0, 4, 0, 0,
                        -3, 0, 0, 1,
                        0, 11, 5, 0,
                        9, 6, 0, 0,
                        -4, 10, 4, 2,
                        5, 3, 0, 0,
                        16, 0, 0, -9,
                        -3, 0, 0, 0,
                        0, 3, 2, -1,
                        7, 0, 0, -3,
                        -25, 22, 0, 0,
                        42, 223, 119, -22,
                        -27, -143, -77, 14,
                        9, 49, 26, -5,
                        -1166, 0, 0, 505,
                        -5, 0, 0, 2,
                        -6, 0, 0, 3,
                        -8, 0, 1, 4,
                        0, -4, 0, 0,
                        117, 0, 0, -63,
                        -4, 8, 4, 2,
                        3, 0, 0, -2,
                        -5, 0, 0, 2,
                        0, 31, 0, 0,
                        -5, 0, 1, 3,
                        4, 0, 0, -2,
                        -4, 0, 0, 2,
                        -24, -13, -6, 10,
                        3, 0, 0, 0,
                        0, -32, -17, 0,
                        8, 12, 5, -3,
                        3, 0, 0, -1,
                        7, 13, 0, 0,
                        -3, 16, 0, 0,
                        50, 0, 0, -27,
                        0, -5, -3, 0,
                        13, 0, 0, 0,
                        0, 5, 3, 1,
                        24, 5, 2, -11,
                        5, -11, -5, -2,
                        30, -3, -2, -16,
                        18, 0, 0, -9,
                        8, 614, 0, 0,
                        3, -3, -1, -2,
                        6, 17, 9, -3,
                        -3, -9, -5, 2,
                        0, 6, 3, -1,
                        -127, 21, 9, 55,
                        3, 5, 0, 0,
                        -6, -10, -4, 3,
                        5, 0, 0, 0,
                        16, 9, 4, -7,
                        3, 0, 0, -2,
                        0, 22, 0, 0,
                        0, 19, 10, 0,
                        7, 0, 0, -4,
                        0, -5, -2, 0,
                        0, 3, 1, 0,
                        -9, 3, 1, 4,
                        17, 0, 0, -7,
                        0, -3, -2, -1,
                        -20, 34, 0, 0,
                        -10, 0, 1, 5,
                        -4, 0, 0, 2,
                        22, -87, 0, 0,
                        -4, 0, 0, 2,
                        -3, -6, -2, 1,
                        -16, -3, -1, 7,
                        0, -3, -2, 0,
                        4, 0, 0, 0,
                        -68, 39, 0, 0,
                        27, 0, 0, -14,
                        0, -4, 0, 0,
                        -25, 0, 0, 0,
                        -12, -3, -2, 6,
                        3, 0, 0, -1,
                        3, 66, 29, -1,
                        490, 0, 0, -213,
                        -22, 93, 49, 12,
                        -7, 28, 15, 4,
                        -3, 13, 7, 2,
                        -46, 14, 0, 0,
                        -5, 0, 0, 0,
                        2, 1, 0, 0,
                        0, -3, 0, 0,
                        -28, 0, 0, 15,
                        5, 0, 0, -2,
                        0, 3, 0, 0,
                        -11, 0, 0, 5,
                        0, 3, 1, 0,
                        -3, 0, 0, 1,
                        25, 106, 57, -13,
                        5, 21, 11, -3,
                        1485, 0, 0, 0,
                        -7, -32, -17, 4,
                        0, 5, 3, 0,
                        -6, -3, -2, 3,
                        30, -6, -2, -13,
                        -4, 4, 0, 0,
                        -19, 0, 0, 10,
                        0, 4, 2, -1,
                        0, 3, 0, 0,
                        4, 0, 0, -2,
                        0, -3, -1, 0,
                        -3, 0, 0, 0,
                        5, 3, 1, -2,
                        0, 11, 0, 0,
                        118, 0, 0, -52,
                        0, -5, -3, 0,
                        -28, 36, 0, 0,
                        5, -5, 0, 0,
                        14, -59, -31, -8,
                        0, 9, 5, 1,
                        -458, 0, 0, 198,
                        0, -45, -20, 0,
                        9, 0, 0, -5,
                        0, -3, 0, 0,
                        0, -4, -2, -1,
                        11, 0, 0, -6,
                        6, 0, 0, -2,
                        -16, 23, 0, 0,
                        0, -4, -2, 0,
                        -5, 0, 0, 2,
                        -166, 269, 0, 0,
                        15, 0, 0, -8,
                        10, 0, 0, -4,
                        -78, 45, 0, 0,
                        0, -5, -2, 0,
                        7, 0, 0, -4,
                        -5, 328, 0, 0,
                        3, 0, 0, -2,
                        5, 0, 0, -2,
                        0, 3, 1, 0,
                        -3, 0, 0, 0,
                        -3, 0, 0, 0,
                        0, -4, -2, 0,
                        -1223, -26, 0, 0,
                        0, 7, 3, 0,
                        3, 0, 0, 0,
                        0, 3, 2, 0,
                        -6, 20, 0, 0,
                        -368, 0, 0, 0,
                        -75, 0, 0, 0,
                        11, 0, 0, -6,
                        3, 0, 0, -2,
                        -3, 0, 0, 1,
                        -13, -30, 0, 0,
                        21, 3, 0, 0,
                        -3, 0, 0, 1,
                        -4, 0, 0, 2,
                        8, -27, 0, 0,
                        -19, -11, 0, 0,
                        -4, 0, 0, 2,
                        0, 5, 2, 0,
                        -6, 0, 0, 2,
                        -8, 0, 0, 0,
                        -1, 0, 0, 0,
                        -14, 0, 0, 6,
                        6, 0, 0, 0,
                        -74, 0, 0, 32,
                        0, -3, -1, 0,
                        4, 0, 0, -2,
                        8, 11, 0, 0,
                        0, 3, 2, 0,
                        -262, 0, 0, 114,
                        0, -4, 0, 0,
                        -7, 0, 0, 4,
                        0, -27, -12, 0,
                        -19, -8, -4, 8,
                        202, 0, 0, -87,
                        -8, 35, 19, 5,
                        0, 4, 2, 0,
                        16, -5, 0, 0,
                        5, 0, 0, -3,
                        0, -3, 0, 0,
                        1, 0, 0, 0,
                        -35, -48, -21, 15,
                        -3, -5, -2, 1,
                        6, 0, 0, -3,
                        3, 0, 0, -1,
                        0, -5, 0, 0,
                        12, 55, 29, -6,
                        0, 5, 3, 0,
                        -598, 0, 0, 0,
                        -3, -13, -7, 1,
                        -5, -7, -3, 2,
                        3, 0, 0, -1,
                        5, -7, 0, 0,
                        4, 0, 0, -2,
                        16, -6, 0, 0,
                        8, -3, 0, 0,
                        8, -31, -16, -4,
                        0, 3, 1, 0,
                        113, 0, 0, -49,
                        0, -24, -10, 0,
                        4, 0, 0, -2,
                        27, 0, 0, 0,
                        -3, 0, 0, 1,
                        0, -4, -2, 0,
                        5, 0, 0, -2,
                        0, -3, 0, 0,
                        -13, 0, 0, 6,
                        5, 0, 0, -2,
                        -18, -10, -4, 8,
                        -4, -28, 0, 0,
                        -5, 6, 3, 2,
                        -3, 0, 0, 1,
                        -5, -9, -4, 2,
                        17, 0, 0, -7,
                        11, 4, 0, 0,
                        0, -6, -2, 0,
                        83, 15, 0, 0,
                        -4, 0, 0, 2,
                        0, -114, -49, 0,
                        117, 0, 0, -51,
                        -5, 19, 10, 2,
                        -3, 0, 0, 0,
                        -3, 0, 0, 2,
                        0, -3, -1, 0,
                        3, 0, 0, 0,
                        0, -6, -2, 0,
                        393, 3, 0, 0,
                        -4, 21, 11, 2,
                        -6, 0, -1, 3,
                        -3, 8, 4, 1,
                        8, 0, 0, 0,
                        18, -29, -13, -8,
                        8, 34, 18, -4,
                        89, 0, 0, 0,
                        3, 12, 6, -1,
                        54, -15, -7, -24,
                        0, 3, 0, 0,
                        3, 0, 0, -1,
                        0, 35, 0, 0,
                        -154, -30, -13, 67,
                        15, 0, 0, 0,
                        0, 4, 2, 0,
                        0, 9, 0, 0,
                        80, -71, -31, -35,
                        0, -20, -9, 0,
                        11, 5, 2, -5,
                        61, -96, -42, -27,
                        14, 9, 4, -6,
                        -11, -6, -3, 5,
                        0, -3, -1, 0,
                        123, -415, -180, -53,
                        0, 0, 0, -35,
                        -5, 0, 0, 0,
                        7, -32, -17, -4,
                        0, -9, -5, 0,
                        0, -4, 2, 0,
                        -89, 0, 0, 38,
                        0, -86, -19, -6,
                        0, 0, -19, 6,
                        -123, -416, -180, 53,
                        0, -3, -1, 0,
                        12, -6, -3, -5,
                        -13, 9, 4, 6,
                        0, -15, -7, 0,
                        3, 0, 0, -1,
                        -62, -97, -42, 27,
                        -11, 5, 2, 5,
                        0, -19, -8, 0,
                        -3, 0, 0, 1,
                        0, 4, 2, 0,
                        0, 3, 0, 0,
                        0, 4, 2, 0,
                        -85, -70, -31, 37,
                        163, -12, -5, -72,
                        -63, -16, -7, 28,
                        -21, -32, -14, 9,
                        0, -3, -1, 0,
                        3, 0, 0, -2,
                        0, 8, 0, 0,
                        3, 10, 4, -1,
                        3, 0, 0, -1,
                        0, -7, -3, 0,
                        0, -4, -2, 0,
                        6, 19, 0, 0,
                        5, -173, -75, -2,
                        0, -7, -3, 0,
                        7, -12, -5, -3,
                        -3, 0, 0, 2,
                        3, -4, -2, -1,
                        74, 0, 0, -32,
                        -3, 12, 6, 2,
                        26, -14, -6, -11,
                        19, 0, 0, -8,
                        6, 24, 13, -3,
                        83, 0, 0, 0,
                        0, -10, -5, 0,
                        11, -3, -1, -5,
                        3, 0, 1, -1,
                        3, 0, 0, -1,
                        -4, 0, 0, 0,
                        5, -23, -12, -3,
                        -339, 0, 0, 147,
                        0, -10, -5, 0,
                        5, 0, 0, 0,
                        3, 0, 0, -1,
                        0, -4, -2, 0,
                        18, -3, 0, 0,
                        9, -11, -5, -4,
                        -8, 0, 0, 4,
                        3, 0, 0, -1,
                        0, 9, 0, 0,
                        6, -9, -4, -2,
                        -4, -12, 0, 0,
                        67, -91, -39, -29,
                        30, -18, -8, -13,
                        0, 0, 0, 0,
                        0, -114, -50, 0,
                        0, 0, 0, 23,
                        517, 16, 7, -224,
                        0, -7, -3, 0,
                        143, -3, -1, -62,
                        29, 0, 0, -13,
                        -4, 0, 0, 2,
                        -6, 0, 0, 3,
                        5, 12, 5, -2,
                        -25, 0, 0, 11,
                        -3, 0, 0, 1,
                        0, 4, 2, 0,
                        -22, 12, 5, 10,
                        50, 0, 0, -22,
                        0, 7, 4, 0,
                        0, 3, 1, 0,
                        -4, 4, 2, 2,
                        -5, -11, -5, 2,
                        0, 4, 2, 0,
                        4, 17, 9, -2,
                        59, 0, 0, 0,
                        0, -4, -2, 0,
                        -8, 0, 0, 4,
                        -3, 0, 0, 0,
                        4, -15, -8, -2,
                        370, -8, 0, -160,
                        0, 0, -3, 0,
                        0, 3, 1, 0,
                        -6, 3, 1, 3,
                        0, 6, 0, 0,
                        -10, 0, 0, 4,
                        0, 9, 4, 0,
                        4, 17, 7, -2,
                        34, 0, 0, -15,
                        0, 5, 3, 0,
                        -5, 0, 0, 2,
                        -37, -7, -3, 16,
                        3, 13, 7, -2,
                        40, 0, 0, 0,
                        0, -3, -2, 0,
                        -184, -3, -1, 80,
                        -3, 0, 0, 1,
                        -3, 0, 0, 0,
                        0, -10, -6, -1,
                        31, -6, 0, -13,
                        -3, -32, -14, 1,
                        -7, 0, 0, 3,
                        0, -8, -4, 0,
                        3, -4, 0, 0,
                        0, 4, 0, 0,
                        0, 3, 1, 0,
                        19, -23, -10, 2,
                        0, 0, 0, -10,
                        0, 3, 2, 0,
                        0, 9, 5, -1,
                        28, 0, 0, 0,
                        0, -7, -4, 0,
                        8, -4, 0, -4,
                        0, 0, -2, 0,
                        0, 3, 0, 0,
                        -3, 0, 0, 1,
                        -9, 0, 1, 4,
                        3, 12, 5, -1,
                        17, -3, -1, 0,
                        0, 7, 4, 0,
                        19, 0, 0, 0,
                        0, -5, -3, 0,
                        14, -3, 0, -1,
                        0, 0, -1, 0,
                        0, 0, 0, -5,
                        0, 5, 3, 0,
                        13, 0, 0, 0,
                        0, -3, -2, 0,
                        2, 9, 4, 3,
                        0, 0, 0, -4,
                        8, 0, 0, 0,
                        0, 4, 2, 0,
                        6, 0, 0, -3,
                        6, 0, 0, 0,
                        0, 3, 1, 0,
                        5, 0, 0, -2,
                        3, 0, 0, -1,
                        -3, 0, 0, 0,
                        6, 0, 0, 0,
                        7, 0, 0, 0,
                        -4, 0, 0, 0,
                        4, 0, 0, 0,
                        6, 0, 0, 0,
                        0, -4, 0, 0,
                        0, -4, 0, 0,
                        5, 0, 0, 0,
                        -3, 0, 0, 0,
                        4, 0, 0, 0,
                        -5, 0, 0, 0,
                        4, 0, 0, 0,
                        0, 3, 0, 0,
                        13, 0, 0, 0,
                        21, 11, 0, 0,
                        0, -5, 0, 0,
                        0, -5, -2, 0,
                        0, 5, 3, 0,
                        0, -5, 0, 0,
                        -3, 0, 0, 2,
                        20, 10, 0, 0,
                        -34, 0, 0, 0,
                        -19, 0, 0, 0,
                        3, 0, 0, -2,
                        -3, 0, 0, 1,
                        -6, 0, 0, 3,
                        -4, 0, 0, 0,
                        3, 0, 0, 0,
                        3, 0, 0, 0,
                        4, 0, 0, 0,
                        3, 0, 0, -1,
                        6, 0, 0, -3,
                        -8, 0, 0, 3,
                        0, 3, 1, 0,
                        -3, 0, 0, 0,
                        0, -3, -2, 0,
                        126, -63, -27, -55,
                        -5, 0, 1, 2,
                        -3, 28, 15, 2,
                        5, 0, 1, -2,
                        0, 9, 4, 1,
                        0, 9, 4, -1,
                        -126, -63, -27, 55,
                        3, 0, 0, -1,
                        21, -11, -6, -11,
                        0, -4, 0, 0,
                        -21, -11, -6, 11,
                        -3, 0, 0, 1,
                        0, 3, 1, 0,
                        8, 0, 0, -4,
                        -6, 0, 0, 3,
                        -3, 0, 0, 1,
                        3, 0, 0, -1,
                        -3, 0, 0, 1,
                        -5, 0, 0, 2,
                        24, -12, -5, -11,
                        0, 3, 1, 0,
                        0, 3, 1, 0,
                        0, 3, 2, 0,
                        -24, -12, -5, 10,
                        4, 0, -1, -2,
                        13, 0, 0, -6,
                        7, 0, 0, -3,
                        3, 0, 0, -1,
                        3, 0, 0, -1])
